Какой текст появится в консоли

В исходнике есть ошибки компиляции. После исправления имён и точки входа создание ClassB напечатает BBB дважды: оба конструктора вызывают переопределённый метод.

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

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

В исходнике есть ошибки компиляции. После исправления имён и точки входа создание ClassB напечатает BBB дважды: оба конструктора вызывают переопределённый метод.

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

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

Условие

Каким будет вывод программы при создании экземпляра 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 obj = new();
    }
}

Ответ

В исходнике есть ошибки компиляции. После исправления имён и точки входа создание ClassB напечатает BBB дважды: оба конструктора вызывают переопределённый метод.

C# различает test и Test: базовый виртуальный метод нужно назвать Test, иначе вызов в ClassA и override в ClassB некорректны. Блок с классом Main также следует заменить обычной точкой входа, например static void Main() { new ClassB(); } внутри класса Program.

В исправленной версии сначала работает конструктор ClassA, но виртуальный вызов уже направляется в ClassB.Test. Затем конструктор ClassB вызывает тот же метод ещё раз. Вызывать переопределяемые методы из конструктора опасно: производный объект ещё не завершил инициализацию.

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

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

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

Подробнее