动态 - 它是引用类型还是值类型?

时间:2014-03-19 04:50:12

标签: c# .net

我认为它是引用类型为...你可以实例化这样的东西:

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

2 个答案:

答案 0 :(得分:4)

dynamic似乎是一种引用类型,详见MSDN:

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

答案 1 :(得分:0)

dynamic is Reference Type

这是我从C# in Depth

获得的

让我们 假设我们的产品不存储在数据库,XML或内存中。他们是 可通过各种Web服务访问,但您只能使用Python代码访问它 该代码使用Python的动态特性来构建结果而不声明类型 具有您需要访问的所有属性。相反,它会让你要求任何财产, 并试着找出你在执行时的意思。

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

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#代码可能始终保持静态输入。