可空类型是引用类型吗?

Vai*_*ain 131 .net c# types nullable

当我宣布一个可以int为空的时候

int? i=null;
Run Code Online (Sandbox Code Playgroud)

i这里是否成为参考类型?

kem*_*002 129

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

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

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

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


Chr*_*isF 24

Nullable类型(C#编程指南):

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

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

所以,不,他们不是参考类型.


Ste*_*ary 12

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

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

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


Mat*_*ott 6

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

  • 我会查询'智能处理',而非主观.就个人而言,我觉得这种行为令人困惑,而且经常令人烦恼 (2认同)