是否为可空类型引用类型?

当我声明一个 int为空时

int? i=null;

这里的 i是否成为引用类型?

29268 次浏览

不,可空结构是结构,它有两个值:

  1. 数据类型的值(int表示 int?DateTime表示 DateTime?,等等)。
  2. 一个布尔值,它告诉我们是否已经设置了数据类型值(HasValue是属性)

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

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

不,Nullable 类型实际上是一个 struct。运行时将智能地为您处理空值的设置,在引用类型不是... ... 时,提供引用类型的外观。

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

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

还有

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

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

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

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

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

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