这可能是后续问题nullable types。内存中的哪些内存是可空类型?
存储器中存储了哪些可为空的值类型(int?
...)?首先,我认为这已经足够清晰了,因为Nullable<T>
是结构体,它们是值类型。然后我发现乔恩斯基特的文章“Memory in .NET”,其中说:
注意,值类型变量可以 永远不会有一个null值 - 这 将没有任何意义,因为空是一个 引用类型概念,意思是“此参考类型变量 的值 不是对所有对象的引用” 全部“。
阅读本声明后,我有点困惑。所以我们假设我有int? a = null;
。由于int
通常是一个值类型,它是否以栈方式存储在结构Nullable<T>
内(我使用“正常”,因为我不知道当值类型变为空时会发生什么)?或者其他任何事情发生在这里 - 也许堆在一起?
来自我的非常容易的+1。谢谢你用尽了答案。我很在乎,因为我很好奇。我想(可能天真地说)知道在我的代码背后发生了什么是有价值的信息。我不想最终编写一些神奇的东西 - 什么神奇的东西。 – 2010-05-19 14:41:04
@Ondrej,如果您认为Nullable编译器支持是魔术,请尝试使用包含闭包的lambda表达式使用yield返回来编写IEnumerable方法。在ildasm中打开生成的程序,看看编译器为你做了什么。 – 2010-05-19 14:48:53
我一般都在讲。并不是说我实际上认为编程中的一切都是神奇的。我知道最有可能比这更难以理解的代码段。 – 2010-05-19 15:47:00