2010-01-03 54 views
2

如果我从一个值类型声明一个可为空的值(通过Nullable或?符号),它是否仍然遵守值类型的规则(即,默认通过值传递,当它超出范围时解除分配,而不是垃圾收集器运行)还是它变成一个引用类型,因为它实际上是Nullable类型的?C#可为空的变量仍然作为值类型吗?

+2

您是否尝试过自己测试这些东西? – 2010-01-03 03:24:30

回答

3

是的,System.Nullable是一个通用的Struct,即值类型。

+0

我并不是以一种批判的方式来表达它,但我认为一些参考文献会有帮助,就像雅各所做的那样。他们可能会引导读者更深入的信息,使他能够与其他问题进行一些联系等等。 – lmsasu 2010-01-03 12:41:28

+2

我倾向于只提供文章,不能访问使用谷歌我感觉幸运的功能。提供谷歌结果编号1的链接是无意义的练习。 – 2010-01-03 13:29:26

1

可为空的值类型本质上只是一个值类型的结构包装,它允许将它们标记为null。

是这样的:

struct Nullable<T> 
{ 
    public T Value; 
    public bool HasValue; 
} 

我相信它实际上比这更复杂的引擎盖下,编译器确实很多不错的东西给你,让你可以写例如if(myInt == null)。但是,是的,它们仍然是价值类型。

7

的文档是在这里:

http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx

正如你所看到的,文档描述为“可空结构”,这表明它是值类型。此外,该文档还给出了该类型声明的第一行:

public struct Nullable<T> where T : struct, new() 

再次显示该类型是值类型。