инициализация типа значения .net - PullRequest
3 голосов
/ 05 марта 2012

Каково значение в памяти, например, целочисленного значения (int) после объявления, но не инициализации?В «CLR vi C #» Рихтер пишет, что типы значений инициализируются с 0, но не могут использоваться.Так что же будет в памяти после объявления такой переменной

int testVar;

И как реализован механизм инициализации проверки?

Ответы [ 3 ]

5 голосов
/ 05 марта 2012

Типы инициализируются с памятью, все нули. Я не знаю, соответствует ли это спецификации для всех типов значений, поэтому вы не можете рассчитывать на это, пока не проверите. Для разных типов значений нули в памяти могут означать разные вещи в зависимости от того, что представляет тип.

Типы значений автоматически инициализируются и могут использоваться, когда они являются полем класса, а не локальными переменными. Насколько я знаю, в самой CLR нет проверки инициализации. Проверка инициализации выполняется компилятором и сообщает об ошибке времени компиляции при использовании неинициализированной переменной.

0 голосов
/ 05 марта 2012

В c # некоторые типы позволяют иметь переменные, которые могут иметь нулевое значение, например переменные Nullable (Int32? IntAux).Сначала этот тип будет нулевым.В противном случае переменные Int32 не позволяют иметь нулевые значения.

И вы можете проверить, была ли переменная инициализирована или нет, делая что-то вроде (intAux == null).

0 голосов
/ 05 марта 2012

Насколько я знаю, объявление резервирует некоторую память в соответствии с тем, как байты могут нуждаться в этом конкретном типе.Эти байты теоретически могут быть случайным образом заполнены тем, что физически занимало эти конкретные байты аппаратного обеспечения.

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