Что выведет код 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 ошибок.
Предыдущий вопрос
Порядок инициализации при создании наследника
Следующий вопрос
Статическое поле общее для всех объектов
Термины по теме
Ещё по теме «ООП в C#»
- Абстрактный класс или интерфейс
- protected internal и private protected
- Методы интерфейса по умолчанию
- Явная реализация интерфейса
- Банковские счета: инкапсуляция и инварианты
- Фигуры: полиморфная площадь
- Чем new отличается от override
- new и override при вызове через базовый тип