Страницы

Поиск по вопросам

среда, 4 декабря 2019 г.

Инициализация структур C#

#c_sharp #net #c_sharp_faq


Почему в значимых типах C# необходимо инициализировать все поля, при наличии конструктора? 

Например, следующий код не скомпилируется

struct AAA
{
    public int A;
    public string C;

    public AAA(int a)
    {
        A = a;
    }
}



  Поле ААА.С должно быть полностью определено до возврата управления в
  вызывающий метод


Но если уберем конструктор, то все компилируется 

struct AAA
{
    public int A;
    public string C;
}

    


Ответы

Ответ 1



Дело в том, что для структур, в отличие от классов, нету инициализации полей по умолчанию (ради эффективности). Если вы не определяете конструктор, то у вас есть конструктор по умолчанию, который инициализирует все поля нулевым значением (default соответствующего типа). Если вы определяете свой конструктор, то достаточно вызвать конструктор по умолчанию: public AAA(int a) : this() { A = a; } Без этого поле C инициализировано не было бы, и значение было бы не определено. Такие ситуации C#, в отличие от C++, не допускает.

Комментариев нет:

Отправить комментарий