【发布时间】:2011-03-10 02:46:30
【问题描述】:
当我将 int 声明为可为空时
int? i=null;
这里的i会变成引用类型吗?
【问题讨论】:
当我将 int 声明为可为空时
int? i=null;
这里的i会变成引用类型吗?
【问题讨论】:
不,可为空的是一个结构。发生的事情是可空结构有两个值:
int 对应 int?,DateTime 对应 DateTime? 等)。HasValue 是财产。)当您设置数据类型的值时,结构体将HasValue 更改为true。
【讨论】:
object.MemberwiseClone())一个可为空的将导致一个新的“实例”,对吧?
来自Nullable Types (C# Programming Guide):
Nullable 类型是 System.Nullable 结构的实例。
和
Nullable 类型表示可以分配 null 值的值类型变量。您不能基于引用类型创建可为空的类型。 (引用类型已经支持空值。)
所以,不,它们不是引用类型。
【讨论】:
可空类型既不是值类型也不是引用类型。它们更像值类型,但具有引用类型的一些属性。
当然,可空类型可以设置为null。此外,可为空的类型不能满足通用的struct 约束。此外,当您使用等于false 的HasValue 对可空类型进行装箱时,您将得到一个null 指针,而不是装箱的可空类型(取消装箱也存在类似情况)。
这些属性使可空类型成为非值类型,但它们肯定也不是引用类型。它们是它们自己的特殊可空值类型。
【讨论】:
typeof(int?).IsValueType 等于 true。
Nullable<T> 是struct。
不,Nullable 类型实际上是一个结构。运行时会智能地为您处理 null 值的设置,呈现引用类型的外观,当它不是时......
【讨论】:
【讨论】:
您不需要将引用类型设为可为空的类型,因为您可以在其位置传递 null。
【讨论】: