Почему новый Модификатор дает мне результат базового класса после его скрытия в производном классе?

Код:

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 ответа

Чтобы получить ожидаемое поведение, вы должны пометить метод как виртуальный в базовом классе и переопределить его в подпрограммах. Вы объявили все переменные как тип базового класса, поэтому должен применяться метод базового класса.

Он создает правильный объект, но для доступа к его конкретным свойствам вам нужно сначала привести его к действию.

Другие вопросы по тегам