Выбор ответа 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: это новый метод, который скрывает базовый, но не участвует в полиморфизме.

Варианты ответа

  1. Derived Derived
  2. Base Base
  3. Derived Base
  4. Base Derivedправильный ответ

Разбор

Hello объявлен с new: это новый метод, который скрывает базовый, но не участвует в полиморфизме. Через ссылку типа Base вызывается Base.Hello. Bye переопределён через override, вызов виртуальный, и выполняется версия реального типа объекта, Derived. Отсюда Base Derived.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме