Что выведет код Senior ООП в C# обновлено

Порядок статических и обычных конструкторов

Вопрос

Что выведет программа (.NET 8)? По строке на каждый вывод.

new Derived();

class Base
{
    static Base() => Console.WriteLine("static Base");
    private readonly int _b = Log("field Base");
    public Base() => Console.WriteLine("ctor Base");
    protected static int Log(string s) { Console.WriteLine(s); return 0; }
}
class Derived : Base
{
    static Derived() => Console.WriteLine("static Derived");
    private readonly int _d = Log("field Derived");
    public Derived() => Console.WriteLine("ctor Derived");
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: static Derived, static Base, field Derived, field Base, ctor Base, ctor Derived. Перед созданием Derived срабатывает его статический конструктор.

Что выведет

static Derived
static Base
field Derived
field Base
ctor Base
ctor Derived

Разбор

Перед созданием Derived срабатывает его статический конструктор. Затем инициализаторы полей Derived, и только при обращении к Log (статическому члену Base) инициализируется Base: его статический конструктор выполняется прямо перед этим вызовом. Потом вызывается конструктор Base: его инициализаторы полей и тело, и в конце тело Derived.

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

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

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