Типы, допускающие значение NULL, ссылочные типы?


Ответы:


136

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

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

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

Обнуляемые типы (Руководство по программированию в C #)


26

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

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

и

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

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


14

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

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

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


6

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


2
Я бы спросил «разумно обработать», скорее субъективно. Лично меня такое поведение сбивает с толку и часто раздражает.
nicodemus13


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.