Решал задачу по наследованию на: http://skills.itvdn.com/
Конкретно условие звучит так:
После объявления класса Base создать такой класс Derived, унаследованный от Base, чтобы его field1 по умолчанию имело значение “derived.f1”, а field2 – значение "base.f2".
Казалось бы ничего сложного, всего лишь дописал конструктор и присвоил в нём полям нужные значения.
using System;
namespace Less03_task01
{
class Program
{
static void Main( string[] args )
{
Derived inst = new Derived();
Console.WriteLine("f1 = {0}\tf2 = {1}", inst.field1, inst.field2);
Console.ReadKey();
}
}
class Base
{
public string field1 = "base.f1";
public string field2 = "base.f2";
}
class Derived : Base
{
public Derived()
{
field1 = "derived.f1";
field2 = "base.f2";
}
}
}
Но *** та там, задача решена не верно. Залез в подсказки там было написано:
"Или можно перекрыть поле field1 новым полем с таким же именем (используйте ключевое слово new)."
Что это значит и как это использовать в решении задачи?
class Base
{
public string field1 = "base.f1";
public string field2 = "base.f2";
}
class Derived : Base
{
public new string field1 = "derived.f1";
}
Термин «перекрытие» означает, что в производном классе будет присутствовать такой же член, как и в базовом классе, и перекрывать его. Другими словами, в производном классе будет новый, никак не связанный с базовым классом (в отличии от виртуальных) член с совпадающим именем.
var d1 = new Derived();
var d2 = (Base) new Derived();
Console.WriteLine(d1.field1); // derived.f1
Console.WriteLine(d2.field1); // base.f1
Перекрывать члены базового класса можно и без оператора new
но в таком случае компилятор выкинет предупреждение. Другими словами, оператор new
просто выключает предупреждение компилятора.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Имеется две моделиUser (получена в результате make:auth) и Ad
здравствуйте, подскажите хорошие форматеры php, чтобы код выглядил красиво и удобно