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