2014-03-19 69 views
1

我认为它是引用类型的...你可以实例化这样的东西:动态 - 它是引用类型还是值类型?

dynamic d1 = new SomeClass(); // SomeClass extends from System.Dynamic.DynamicObject 
dynamic d2 = new ExpandoObject() ; 
d2.x = 100; 
d2.y = "120"; 
+0

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

+0

动态解析在运行时 – RadioSpace

回答

0
dynamic is Reference Type 

这是我从C# in Depth

让我们 suppos e我们的产品不存储在数据库,XML或内存中。他们可以通过各种网络服务访问它们,但只有Python代码才能访问它 - 并且代码使用Python的动态特性来构建结果,而不用声明具有需要访问的所有属性的类型 。相反,它会让你请求任何财产, 并尝试解决你在执行时的意思。

答案以动态的形式出现 - 一种新的类型4,C#编译器 允许您动态使用。如果一个表达式的类型为dynamic,则可以调用其上的方法 ,访问属性,将其作为方法参数传递,等等。大多数正常的绑定过程都是在执行时发生的,而不是编译时的 时间。您可以隐式地将值从动态转换为任何其他类型。

ScriptEngine engine = Python.CreateEngine(); 
ScriptScope scope = engine.ExecuteFile("FindProducts.py"); 
dynamic products = scope.GetVariable("products"); 
foreach (dynamic product in products) 
{ 
Console.WriteLine("{0}: {1}", product.ProductName, product.Price); 
} 

产品和产品被宣布为是动态的,所以编译器很乐意为 让我们遍历产品列表中,并打印出的属性,即使它 不知道它是否会工作。如果我们输入了错别字,则使用product.Name而不是 product.ProductName,例如,它只会在执行时显示。 这与静态类型化的C#的其余部分完全相反。但动态 只键入进场时与一类的动态表现都参与: 最C#代码很可能仍然是整个静态类型。

+0

此代码将使用var? – RadioSpace

相关问题