C#4.0dynamic与扩展…他们在哪里适合?
我正在尝试学习C#4.0带来的所有新function。 我无法理解DynamicObject
和ExpandoObject
types之间的区别。 看起来像DynamicObject
被使用,例如,当您想要访问与COM / Office对象交谈时从Python脚本和ExpandoObject
variables。 我对吗? 它们的用途有什么不同?
Expando 是一个 dynamic
types,可以在运行时将成员添加(或删除)到该types中。 dynamic
是为了让.NET在与dynamictypes语言(如Python和JavaScript)接口时能够与types互操作。
所以,如果您需要处理dynamictypes:使用dynamic
,如果您需要处理dynamic数据,如XML或JSON:使用ExpandoObject
expando的声明显示了dynamic和expando之间的关系:
dynamic expando = new ExpandoObject();
而且可以添加一个新的属性:
expando.SomeNewStringVal = "Hello World!";
最后一行代码在SomeNewStringVal
对象中创build一个名为SomeNewStringVal
全新string属性。 stringtypes是从赋值中推断出来的。
所以一个expando是一个dynamic的数据types,可以表示dynamic变化的数据。 这就是简而言之。 这里有更深入的dynamic和expando 。
完整的例子:
using System; using System.Dynamic; class Program { static void Main(string[] args) { dynamic expando = new ExpandoObject(); expando.SomeNewStringVal = "Hello Brave New Whirrled!"; Console.WriteLine(expando.SomeNewStringVal); // more expando coolness/weirdness: var p = expando as IDictionary<String, object>; p["A"] = "New val 1"; p["B"] = "New val 2"; Console.WriteLine(expando.A); Console.WriteLine(expando.B); } }