@AbnormalUnit

Наследование C#

Есть код:

using System;

namespace SomeStuff
{
class MainClass
{
public static void Main (string[] args)
{
A a = new A();
B b = new B();
A c = new C();
a.Display();
b.Display();
c.Display();
}

public class A
{
public virtual void Display()
{
Console.WriteLine("A");
}
}

public class B : A
{
public override void Display ()
{
Console.WriteLine("B");
}
}

public class C : B
{
public new void Display()
{
Console.WriteLine("C");
}
}
}
}


Ну почему выводит:
A
B
B
Почему выводит перегруженный метод класса, базового класса для C?
Спасибо!
  • Вопрос задан
  • 5756 просмотров
Пригласить эксперта
Ответы на вопрос 3
VenomBlood
@VenomBlood
Все правильно делает. Тип указан как A, метод — виртуальный, иерархия метода кончается на B, создается подтип типа B. При вызове метода производится проверка перегрузок по иерархии наследования, где наиболее подходящая перегрузка — у класса B.
Ответ написан
Комментировать
@Bonart
Потому что переменная с имеет тип А, а значит новый (new) метод класса С просто не виден — виден только одноименный виртуальный метод A, перекрытый (override) в В, после чего унаследованный С, а значит будет вызван именно он.
Ответ написан
@AbnormalUnit Автор вопроса
Все, спасибо, разобрался.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы