2010-06-30 88 views

回答

119

不,可为空是结构。正在发生的事情是,可为空的结构有两个值:

  1. 的数据类型(intint?DateTimeDateTime?等)的值。
  2. 一个布尔值,告诉数据类型值是否已经设置。 (HasValue是属性。)

当您设置数据类型的值,该结构改变HasValue为true。

What is a nullable

+4

您不能在C#中重载'='运算符。布尔标志由隐式转换运算符设置,而不是由赋值运算符设置。 – sepp2k 2010-06-30 12:29:07

+0

哎呀谢谢sepp2k。 – kemiller2002 2010-06-30 12:31:22

6

没有,可空类型,其实是一个结构。运行时会智能地为您处理空值的设置,给出参考类型的外观,当它不是时......

+2

我想查询'智能处理',而不是主观的。就我个人而言,我觉得这种行为令人困惑,并且经常令人讨厌。 – nicodemus13 2012-12-17 18:03:48

24

Nullable Types (C# Programming Guide)

可空类型是System.Nullable结构的实例。

空类型表示可以分配空的值值型变量。您不能基于引用类型创建可为空的类型。 (参考类型已经支持空值。)

因此,不,它们不是引用类型。

0

您应该不需要将引用类型设置为可为空的类型,因为您可以在其位置传递null。

11

可为空的类型既不是值类型也不是引用类型。它们更像值类型,但具有一些参考类型的属性。

当然,可以设置为空的类型为null。此外,可为空的类型不能满足通用的约束条件。此外,当您将HasValue等于false的可空类型框中时,您会得到一个指针而不是一个可装箱的可空类型(与拆箱相似的情况)。

这些属性使可为空的类型为非值类型,但它们肯定不是引用类型。它们是它们自己特殊的可空值类型。