这个问题更多是关于将 a 添加?
到值类型而不是关于int?
在 C# 中,anint
是一种值类型。是int?
值类型还是引用类型?
在我看来,它应该是一个引用类型null
。
这个问题更多是关于将 a 添加?
到值类型而不是关于int?
在 C# 中,anint
是一种值类型。是int?
值类型还是引用类型?
在我看来,它应该是一个引用类型null
。
int?
相当于Nullable<int>
which 意味着它是一个struct。
所以这意味着它是一个值类型。
在我看来,它应该是一个引用类型,因为它可以为空。
你的假设是错误的。来自文档;
Nullable 结构表示可以分配为 null的值类型。Nullable 结构支持仅使用值类型作为可空类型,因为引用类型在设计上可以为空。
所以它有2个值;
Nullable<T>.HasValue
)可空类型是 System.Nullable 结构的实例,因此int?
是值类型。
编辑我应该首先从这个例子开始:
想想枚举。我们编写的每个枚举Enum
都会自动扩展,这是一个类。因此,我们编写的值类型扩展了一个由 .NET 团队编写的类,它是一个引用类型。
您可以通过两种方式拆分类型世界:
null
值理论上所有的组合都是可能的。如果我没记错的话,至少在 C# 中,不能null
产生空集的引用类型的组合。这种组合没有例子。
基本上所有其他 3 种组合都是可能的:
作为值类型或引用类型的性质无关null
(至少在设计和使用语言的方式上,而不是在下面的实际工程细节的方式上)。
值类型是导致变量、参数和字段之间的赋值以完全克隆实例的类型。引用类型是不这样做的类型。
这基本上与实例占用的内存类型(无论是堆栈、堆还是其他东西)无关null
或无关。