可空类型是引用类型吗?

时间:2010-06-30 12:22:58

标签: c# .net types nullable

当我宣布int为可空的

int? i=null;

这里i会成为引用类型吗?

6 个答案:

答案 0 :(得分:129)

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

  1. 数据类型的值(intint?DateTimeDateTime?等。
  2. 一个布尔值,用于指示是否已设置数据类型值。 (HasValue是财产。)
  3. 设置数据类型的值时,结构会将HasValue更改为true。

    Nullable types (C# Programming Guide)

答案 1 :(得分:24)

来自Nullable Types (C# Programming Guide)

  

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

  

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

所以,不,他们不是引用类型。

答案 2 :(得分:12)

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

当然,可以为空的类型可以设置为null。此外,可空类型不能满足通用struct约束。此外,当您设置HasValue等于false的可空类型时,您会获得null指针而不是盒装可空类型(拆箱时存在类似情况)。

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

答案 3 :(得分:6)

不,Nullable类型实际上是一个结构。运行时将智能地为您设置空值,给出引用类型的外观,当它不是....

答案 4 :(得分:1)

Nullable类型不能是引用类型。

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

答案 5 :(得分:0)

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