Почему новый Модификатор дает мне результат базового класса после его скрытия в производном классе?
Код:
class Baseclass
{
public void Fun()
{
Console.Write("Base class" + " ");
}
}
class Derived1 : Baseclass
{
new void Fun()
{
Console.Write("Derived1 class" + " ");
}
}
class Derived2 : Derived1
{
new void Fun()
{
Console.Write("Derived2 class" + " ");
}
}
Согласно определению модификатора "new": "ключевое слово new явно скрывает член, который унаследован от базового класса". Затем, когда мы вызываем метод с новым модификатором в производном классе, он всегда должен выводить как "класс Derived2", но я всегда получаю вывод "Базовый класс" во всех трех условиях.
Baseclass d1 = new Derived1();
Baseclass d2 = new Derived2();
Baseclass b = new Baseclass();
d1.Fun();
d2.Fun();
b.Fun();
Может кто-нибудь, пожалуйста, очистить мои сомнения?
2 ответа
Чтобы получить ожидаемое поведение, вы должны пометить метод как виртуальный в базовом классе и переопределить его в подпрограммах. Вы объявили все переменные как тип базового класса, поэтому должен применяться метод базового класса.
Он создает правильный объект, но для доступа к его конкретным свойствам вам нужно сначала привести его к действию.