Я удивлен, что я не могу инициализировать свои поля в структурах, почему это так? Как:
struct MyStruct
{
private int a = 90;
}
но это ошибка времени выполнения. Я не знаю, почему это проблема? Пожалуйста, объясните это мне.
Причина в основном - производительность. Рассмотрим следующее:
var a = new MyStruct[1000];
Если С# допускает инициализацию полей в структуре, инициализация должна выполняться 1000 раз, один раз для каждого элемента массива. С# хотел избежать таких видов неявного поведения, которые могут быть найдены на других языках.
В С# a struct
не может объявить конструктор по умолчанию.
Компилятор переводит операторы инициализации в конструктор, который не может произойти с struct
в С#.
Это потому, что ваше назначение фактически преобразуется компилятором, который должен выполняться в конструкторе по умолчанию. Но С# struct
не имеют конструкторов по умолчанию, как вы можете видеть в ссылке опубликованной Kent Boogaart.
Это для производительности. Когда вы создаете структуру с помощью конструктора по умолчанию, все, что она делает, выделяет столько байтов в стеке и инициализирует их 0.