Какие строки будут напечатаны в консоли

После исправления синтаксиса вывод будет BBB, затем BBB. В приведённом виде программа не компилируется из-за регистра имён, пропущенной точки с запятой и точки входа.

Короткий ответ

Что ответить на собеседовании

После исправления синтаксиса вывод будет BBB, затем BBB. В приведённом виде программа не компилируется из-за регистра имён, пропущенной точки с запятой и точки входа.

Подробный разбор

Ответ с пояснениями

Условие

В примере объявлены два класса:

  • ClassA содержит виртуальный метод Test() и конструктор, в котором этот метод вызывается.
  • ClassB наследует ClassA и переопределяет метод Test(). Также в его конструкторе происходит вызов Test(). Какой вывод появится в консоли при создании экземпляра ClassB?
public class ClassA
{
    public ClassA()
    {
        Test()
    }

    public virtual void test()
    {
        Console.WriteLine("AAA");
    }
}

public class ClassB : ClassA
{
    public ClassB()
    {
        Test();
    }

    public override void Test()
    {
        Console.WriteLine("BBB");
    }
}

public class Main()
{
    Main()
    {
        classB t = new();
    }
}

Ответ

После исправления синтаксиса вывод будет BBB, затем BBB. В приведённом виде программа не компилируется из-за регистра имён, пропущенной точки с запятой и точки входа.

Нужно добавить ; после Test() в базовом конструкторе, переименовать test в Test, исправить classB на ClassB и оформить обычный static void Main() в классе Program. Конструктор класса с именем Main не является точкой входа программы.

При new ClassB() сначала исполняется конструктор ClassA. Виртуальный вызов выбирает ClassB.Test и печатает BBB. После него тело конструктора ClassB повторяет вызов. AAA не выводится, поскольку переопределение не вызывает base.Test().

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее