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

Когда я объявляю int допускающим значение NULL

int? i=null;

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


person Vaibhav Jain    schedule 30.06.2010    source источник


Ответы (6)


Нет, nullable - это структура. Что происходит, так это то, что обнуляемая структура имеет два значения:

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

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

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

person kemiller2002    schedule 30.06.2010
comment
Итак, это означает, что неглубокое клонирование (с object.MemberwiseClone()) значения, допускающего значение NULL, приведет к созданию нового экземпляра, верно? - person Tim Wißmann; 08.07.2021

Из Nullable Types (Руководство по программированию на C #):

Типы, допускающие значение NULL, являются экземплярами структуры System.Nullable.

а также

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

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

person ChrisF    schedule 30.06.2010

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

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

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

person Stephen Cleary    schedule 30.06.2010

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

person Matthew Abbott    schedule 30.06.2010
comment
Я бы спросил «разумно обработать», скорее субъективно. Лично меня такое поведение сбивает с толку и часто раздражает. - person nicodemus13; 17.12.2012

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

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

person Damien Dennehy    schedule 30.06.2010

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

person devlife    schedule 30.06.2010