Выбор ответа Senior Типы значений и ссылочные обновлено

default и конструктор структуры без параметров

Вопрос

В C# 10+ у структуры объявлен конструктор без параметров, который ставит X = 7. Что будет в arr[0].X после var arr = new S[1];?

struct S
{
    public int X;
    public S() { X = 7; }
}

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: 0. С C 10 явный конструктор без параметров у структуры разрешён, но он вызывается только при new S().

Варианты ответа

  1. 7
  2. 0правильный ответ
  3. Ошибка компиляции: такой конструктор запрещён
  4. NullReferenceException при обращении

Разбор

С C# 10 явный конструктор без параметров у структуры разрешён, но он вызывается только при new S(). Элементы нового массива, default(S) и неинициализированные поля заполняются нулями без вызова конструктора, поэтому X равен 0. Элемент массива структур не может быть null. Это частый вопрос «с подвохом» для senior.

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

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

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