Когда я объявляю int
обнуляемым
int? i=null;
Становится ли здесь i
ссылочным типом?
Нет, объект, допускающий значение NULL, - это структура. Что происходит, так это то, что структура, допускающая значение NULL, имеет два значения:
int
для int?
, DateTime
для DateTime?
и т. Д.). HasValue
- это свойство.) Когда вы устанавливаете значение типа данных, структура меняет HasValue
на true.
Типы, допускающие значение NULL (Руководство по программированию на C #)
Нет, тип, допускающий значение NULL, на самом деле является структурой. Среда выполнения будет разумно обрабатывать установку нулевого значения за вас, создавая видимость ссылочного типа, когда это не так ....
Из Nullable Types (C# Programming Guide):
Nullable types are instances of the System.Nullable struct.
и
Nullable типы представляют собой переменные типа значения, которым может быть присвоено значение null. Вы не можете создать nullable тип на основе ссылочного типа. (Ссылочные типы уже поддерживают значение null.)
Так что нет, это не ссылочные типы.
Обнуляемые типы не являются ни типами значений, ни ссылочными типами. Они больше похожи на типы значений, но имеют несколько свойств ссылочных типов.
Естественно, для типов, допускающих значение NULL, может быть установлено значение NULL
. Кроме того, тип, допускающий значение NULL, не может удовлетворять общему ограничению struct
. Кроме того, когда вы помещаете в коробку тип, допускающий значение NULL, с HasValue
равным false
, вы получаете указатель null
вместо упакованного в коробку типа, допускающего значение NULL (аналогичная ситуация существует с распаковкой ).
Эти свойства делают типы, допускающие значение NULL, типами, не имеющими значения, но они точно также не являются ссылочными типами. Это их собственный специальный тип, допускающий значение NULL.
Типы, допускающие значение NULL, не могут быть ссылочными типами.
Вам не нужно делать ссылочный тип nullable типом, так как вы можете передать null вместо него.