Почему я не могу инициализировать мои поля в моих структурах? - PullRequest
3 голосов
/ 04 марта 2009

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

struct MyStruct
{
    private int a = 90;
}

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

Ответы [ 4 ]

9 голосов
/ 04 марта 2009

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

Компилятор перемещает операторы инициализации в конструктор, чего не может быть с struct в C #.

1 голос
/ 04 марта 2009

Это потому, что ваше назначение на самом деле преобразуется компилятором в конструктор по умолчанию. Но C # struct s не имеет конструкторов по умолчанию, как вы можете видеть в ссылке , опубликованной Кентом Бугаартом.

1 голос
/ 04 марта 2009

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

var a = new MyStruct[1000];

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

0 голосов
/ 04 марта 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...