我们可以为任何数据类型分配var和dynamic,那么它们存储在内存中的哪个位置? var在编译时解析,我的理解是var存储在堆或堆栈中,具体取决于赋值。但动态是在运行时解决的,所以它们存储在哪里之前?
答案 0 :(得分:3)
var
仅仅是变量声明的语法糖。 var str = "abc";
和string str = "abc";
之间没有功能差异,因此它是否在堆栈或堆上取决于您正在使用的类型。
https://msdn.microsoft.com/en-us/library/dd264741.aspx
dynamic
在引擎盖下包含了很多内容,但最终的处理类似于object
,所以它将是一个将它放在堆上的引用类型。
答案 1 :(得分:1)
正如您所说,var
关键字对运行时没有意义。它是编译器为推断类型换出的语言细节。
dynamic
个对象始终boxed作为引用,即使实际类型是值类型,例如int
。
您可以断定声明为动态的变量始终表现为引用。引用本身将属于它的创建范围(堆栈上的本地,堆上的成员),但它引用的对象将存储在堆内存中。