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

686
26 января 2017, 00:40

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

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

struct AAA
{
    public int A;
    public string C;
    public AAA(int a)
    {
        A = a;
    }
}

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

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

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

Дело в том, что для структур, в отличие от классов, нету инициализации полей по умолчанию (ради эффективности). Если вы не определяете конструктор, то у вас есть конструктор по умолчанию, который инициализирует все поля нулевым значением (default соответствующего типа). Если вы определяете свой конструктор, то достаточно вызвать конструктор по умолчанию:

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

Без этого поле C инициализировано не было бы, и значение было бы не определено. Такие ситуации C#, в отличие от C++, не допускает.

READ ALSO
Для чего используется # (##) в url?

Для чего используется # (##) в url?

Никак не могу понять для чего используются # или ## в MVC проектеНажимаю кнопку и получаю url вида http://localhost:55555/example/exm/List##

304
Работа с SELECT и LIKE MySQL

Работа с SELECT и LIKE MySQL

Есть запрос к базе MySQL

376
Не подключается сертификат к telegram

Не подключается сертификат к telegram

Пытаюсь подключить сертификат к телеграм

658
Рекурсия в функции PHP

Рекурсия в функции PHP

Есть такой код:

344