Что выведет код Middle Дженерики обновлено

Статический конструктор в дженерике

Вопрос

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

Console.WriteLine(TypeName<int>.Value);
Console.WriteLine(TypeName<string>.Value);
Console.WriteLine(TypeName<int>.Value);
Console.WriteLine(TypeName<int>.Inits + TypeName<string>.Inits);

static class TypeName<T>
{
    public static readonly string Value;
    public static int Inits;
    static TypeName() { Value = typeof(T).Name; Inits++; }
}

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

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

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

Коротко

Код выведет: Int32, String, Int32, 2. У каждого закрытого типа свой набор статических полей и свой статический конструктор.

Что выведет

Int32
String
Int32
2

Разбор

У каждого закрытого типа свой набор статических полей и свой статический конструктор. TypeName<int> инициализируется один раз (Int32), TypeName<string> один раз (String). Повторное обращение к TypeName<int> берёт готовое значение. Сумма счётчиков 1 + 1 = 2.

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

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