Когда я объявляю int
допускающим значение NULL
int? i=null;
i
здесь становится ссылочным типом?
Когда я объявляю int
допускающим значение NULL
int? i=null;
i
здесь становится ссылочным типом?
Нет, nullable - это структура. Что происходит, так это то, что обнуляемая структура имеет два значения:
int
для int?
, DateTime
для DateTime?
и т. Д.).HasValue
- это собственность.)Когда вы устанавливаете значение типа данных, структура меняет HasValue
на true.
Типы, допускающие значение NULL (Руководство по программированию на C #)
object.MemberwiseClone()
) значения, допускающего значение NULL, приведет к созданию нового экземпляра, верно?
- person Tim Wißmann; 08.07.2021
Из Nullable Types (Руководство по программированию на C #):
Типы, допускающие значение NULL, являются экземплярами структуры System.Nullable.
а также
Типы, допускающие значение NULL, представляют собой переменные типа значения, которым можно присвоить значение NULL. Вы не можете создать тип, допускающий значение NULL, на основе ссылочного типа. (Ссылочные типы уже поддерживают нулевое значение.)
Итак, нет, это не ссылочные типы.
Обнуляемые типы не являются ни типами значений, ни ссылочными типами. Они больше похожи на типы значений, но имеют несколько свойств ссылочных типов.
Естественно, для типов, допускающих значение NULL, может быть установлено значение null
. Кроме того, тип, допускающий значение NULL, не может удовлетворять общему ограничению struct
. Кроме того, когда вы помещаете в коробку тип, допускающий значение NULL, с HasValue
равным false
, вы получаете указатель null
вместо упакованного типа, допускающего значение NULL (аналогичная ситуация существует с распаковкой).
Эти свойства делают типы, допускающие значение NULL, не-значениями, но они точно также не являются ссылочными типами. Это их собственный особый тип, допускающий значение NULL.
Нет, тип Nullable на самом деле является структурой. Среда выполнения будет разумно обрабатывать установку нулевого значения за вас, создавая видимость ссылочного типа, когда это не так ...
Типы, допускающие значение NULL, не могут быть ссылочными типами.
http://msdn.microsoft.com/en-us/library/2cf62fcy.aspx
Вам не нужно делать ссылочный тип типом, допускающим значение NULL, поскольку вы можете передать NULL вместо него.