Что выведет код Middle ООП в C# обновлено
virtual, override и new в цепочке
Вопрос
Что выведет программа (.NET 8)? По строке на каждый вывод.
A x = new C();
B y = new C();
Console.WriteLine(x.Name());
Console.WriteLine(y.Name());
Console.WriteLine(((A)y).Name());
class A { public virtual string Name() => "A"; }
class B : A { public override string Name() => "B"; }
class C : B { public new string Name() => "C"; }
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: B, B, B. C.Name объявлен через new, он не переопределяет виртуальный метод, а скрывает его.
Что выведет
B
B
B
Разбор
C.Name объявлен через new, он не переопределяет виртуальный метод, а скрывает его. Для виртуального вызова последнее переопределение Name это B.Name. Через ссылку A и через ссылку B вызов идёт по таблице виртуальных методов и попадает в B. C напечатался бы только через ссылку типа C.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Статическое поле общее для всех объектов
Следующий вопрос
Принципы ООП на примерах C#
Термины по теме
Ещё по теме «ООП в C#»
- Абстрактный класс или интерфейс
- protected internal и private protected
- Методы интерфейса по умолчанию
- Явная реализация интерфейса
- Банковские счета: инкапсуляция и инварианты
- Фигуры: полиморфная площадь
- Чем new отличается от override
- new и override при вызове через базовый тип