В исходнике есть ошибки компиляции. После исправления имён и точки входа создание 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 вызывает тот же метод ещё раз. Вызывать переопределяемые методы из конструктора опасно: производный объект ещё не завершил инициализацию.