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