Являются ли обнуляемые типы ссылочными типами?

Когда я объявляю int обнуляемым

int? i=null;

Становится ли здесь i ссылочным типом?

131
задан PiotrWolkowski 16 April 2015 в 11:47
поделиться

6 ответов

Нет, объект, допускающий значение NULL, - это структура. Что происходит, так это то, что структура, допускающая значение NULL, имеет два значения:

  1. Значение типа данных ( int для int? , DateTime для DateTime? и т. Д.).
  2. Логическое значение, которое сообщает, было ли установлено значение типа данных. ( HasValue - это свойство.)

Когда вы устанавливаете значение типа данных, структура меняет HasValue на true.

Типы, допускающие значение NULL (Руководство по программированию на C #)

129
ответ дан 24 November 2019 в 00:19
поделиться

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

6
ответ дан 24 November 2019 в 00:19
поделиться

Из Nullable Types (C# Programming Guide):

Nullable types are instances of the System.Nullable struct.

и

Nullable типы представляют собой переменные типа значения, которым может быть присвоено значение null. Вы не можете создать nullable тип на основе ссылочного типа. (Ссылочные типы уже поддерживают значение null.)

Так что нет, это не ссылочные типы.

24
ответ дан 24 November 2019 в 00:19
поделиться

Обнуляемые типы не являются ни типами значений, ни ссылочными типами. Они больше похожи на типы значений, но имеют несколько свойств ссылочных типов.

Естественно, для типов, допускающих значение NULL, может быть установлено значение NULL . Кроме того, тип, допускающий значение NULL, не может удовлетворять общему ограничению struct . Кроме того, когда вы помещаете в коробку тип, допускающий значение NULL, с HasValue равным false , вы получаете указатель null вместо упакованного в коробку типа, допускающего значение NULL (аналогичная ситуация существует с распаковкой ).

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

12
ответ дан 24 November 2019 в 00:19
поделиться

Типы, допускающие значение NULL, не могут быть ссылочными типами.

http://msdn.microsoft.com/en-us/library/2cf62fcy.aspx

1
ответ дан 24 November 2019 в 00:19
поделиться

Вам не нужно делать ссылочный тип nullable типом, так как вы можете передать null вместо него.

0
ответ дан 24 November 2019 в 00:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: