Наследование 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?
Спасибо!

21 Авг 2019 в 07:10
158 +1
0
Ответы
1

В данном случае, метод Display() в классе C объявлен с модификатором new, что означает, что это не переопределение метода Display() из класса B, а скрытие его. То есть, когда вы вызываете метод Display() на объекте типа A, который в действительности является объектом типа C, будет вызываться метод Display() из класса A, так как метод Display() из класса C скрывает метод Display() из класса B.

Чтобы метод Display() из класса C был вызван, необходимо переопределить метод Display() в классе C, как это было сделано в классе B.

Исправленный код будет выглядеть так:

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 override void Display()
{
Console.WriteLine("C");
}
}
}
}

Теперь вывод будет:

A
B
C

Надеюсь, что это поможет!

20 Апр в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 648 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир