可空类型是引用类型吗?


Answers:


136

不,可为空是一个结构。发生的是,可为空的结构具有两个值:

  1. 数据类型的值(int用于int?DateTime用于DateTime?等)。
  2. 一个布尔值,它指示是否已设置数据类型值。(HasValue是财产。)

设置数据类型的值时,该结构将更HasValue改为true。

可空类型(C#编程指南)


26

可空类型(C#编程指南)中

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

可为null的类型表示可被赋值为null的值类型变量。您不能基于引用类型创建可为空的类型。(引用类型已经支持空值。)

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


14

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

自然,可以将可为空的类型设置为null。此外,可为空的类型不能满足一般struct约束。同样,当您将HasValue等于的可为空的类型装箱时false,您将获得一个null指针,而不是装箱的可为空的类型的指针(拆箱也存在类似情况)。

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


6

不,Nullable类型实际上是一个结构。运行时将为您智能地处理空值的设置,并在非...时显示引用类型。


2
我会查询“智能处理”,比较主观。就我个人而言,我发现这种行为令人困惑并且常常令人讨厌。
nicodemus13 2012年


0

您不必将引用类型设为可为null的类型,因为可以在其位置传递null。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.