Почему я не могу инициализировать мои поля в моих структурах?

2

Я удивлен, что я не могу инициализировать свои поля в структурах, почему это так? Как:

struct MyStruct
{
    private int a = 90;
}

но это ошибка времени выполнения. Я не знаю, почему это проблема? Пожалуйста, объясните это мне.

Теги:

4 ответа

1
Лучший ответ

Причина в основном - производительность. Рассмотрим следующее:

var a = new MyStruct[1000];

Если С# допускает инициализацию полей в структуре, инициализация должна выполняться 1000 раз, один раз для каждого элемента массива. С# хотел избежать таких видов неявного поведения, которые могут быть найдены на других языках.

8

В С# a struct не может объявить конструктор по умолчанию.

Компилятор переводит операторы инициализации в конструктор, который не может произойти с struct в С#.

1

Это потому, что ваше назначение фактически преобразуется компилятором, который должен выполняться в конструкторе по умолчанию. Но С# struct не имеют конструкторов по умолчанию, как вы можете видеть в ссылке опубликованной Kent Boogaart.

0

Это для производительности. Когда вы создаете структуру с помощью конструктора по умолчанию, все, что она делает, выделяет столько байтов в стеке и инициализирует их 0.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню