Var或Dynamic变量引用类型或值类型?

时间:2016-09-29 10:10:39

标签: c# .net

我们可以为任何数据类型分配var和dynamic,那么它们存储在内存中的哪个位置? var在编译时解析,我的理解是var存储在堆或堆栈中,具体取决于赋值。但动态是在运行时解决的,所以它们存储在哪里之前?

2 个答案:

答案 0 :(得分:3)

var仅仅是变量声明的语法糖。 var str = "abc";string str = "abc";之间没有功能差异,因此它是否在堆栈或堆上取决于您正在使用的类型。

https://msdn.microsoft.com/en-us/library/dd264741.aspx

dynamic在引擎盖下包含了很多内容,但最终的处理类似于object,所以它将是一个将它放在堆上的引用类型。

https://msdn.microsoft.com/en-us/library/bb383973.aspx

答案 1 :(得分:1)

正如您所说,var关键字对运行时没有意义。它是编译器为推断类型换出的语言细节。

dynamic个对象始终boxed作为引用,即使实际类型是值类型,例如int

您可以断定声明为动态的变量始终表现为引用。引用本身将属于它的创建范围(堆栈上的本地,堆上的成员),但它引用的对象将存储在堆内存中。