Ну, у вас есть несколько ошибок компилятора, но вот исправленная версия, основанная на вашем примере.
class Base {
public int abc = 3;
}
class Derived : Base {
public int abc = 2;
}
static void Main(string[] args)
{
Derived foo = new Derived();
Console.WriteLine(foo.abc);
Base bar = new Derived();
Console.WriteLine(bar.abc);
}
В первой строке выдается 2
. Вторая строка выведет 3
. Причина в том, что, если вы явно не переопределите член базового класса, он применим только к экземплярам конкретного класса.
В вашем производном классе вы по существу используете new
modifier keyword, не используя его явно. Ключевое слово new
скрывает базовый элемент, однако, если конкретный класс отличен в качестве базового типа, новое свойство не будет использоваться и не может быть доступно до тех пор, пока оно не будет «опущено» к конкретному классу.
Во втором примере Derived
класса отливается как Base
, поэтому он будет использовать свойство Base
abc
. Если вы должны были использовать override
keyword, тогда вторая строка также выведет 2
.
Edit: Имейте в виду, что для того, чтобы иметь возможность использовать override
на Derived
класса, вам нужно отметить Base.abc
с virtual
keyword. Кроме того, вы не можете сделать fieldsvirtual
. Для использования ключевого слова virtual
необходимо использовать Properties. Вы не должны открывать поля, чтобы начать с них, так что это обычно никогда не проблема.
Ударьте меня в это. Хороший ответ! –
Ну, я думал, что это давным-давно, но я всегда получаю: "error CS0106: Модификатор 'override' недопустим для этого элемента" – Xenoprimate
Вам нужно добавить свойство 'virtual' в базовый класс ', чтобы использовать' override' в производном классе. –