C# 4.0 C#4.0动态vs扩展。。。它们适合哪里?
我正在努力学习C#4.0带来的所有新功能。我无法理解C# 4.0 C#4.0动态vs扩展。。。它们适合哪里?,c#-4.0,expandoobject,dynamicobject,dynamic-keyword,C# 4.0,Expandoobject,Dynamicobject,Dynamic Keyword,我正在努力学习C#4.0带来的所有新功能。我无法理解DynamicObject和expandooObject类型之间的区别。例如,当您希望从Python脚本访问变量时,以及当与COM/Office对象交谈时,似乎使用了DynamicObject。我说得对吗?它们的用法有什么不同?Expando是一种动态类型,可以在运行时向其添加(或删除)成员dynamic旨在允许.NET在与动态类型语言(如Python和JavaScript)交互时与类型进行互操作 因此,如果需要处理动态类型:使用dynamic
DynamicObject
和expandooObject
类型之间的区别。例如,当您希望从Python脚本访问变量时,以及当与COM/Office对象交谈时,似乎使用了DynamicObject
。我说得对吗?它们的用法有什么不同?Expando是一种动态类型,可以在运行时向其添加(或删除)成员dynamic
旨在允许.NET在与动态类型语言(如Python和JavaScript)交互时与类型进行互操作
因此,如果需要处理动态类型:使用dynamic
,如果需要处理XML或JSON等动态数据:使用ExpandoObject
expando的声明显示了动态和expando之间的关系:
dynamic expando = new ExpandoObject();
以及添加新属性的能力:
expando.SomeNewStringVal = "Hello World!";
最后一行代码在expando对象中创建了一个名为SomeNewStringVal
的全新字符串属性。字符串类型是从赋值中推断出来的
所以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);
}
}
使用系统;
运用系统动力学;
班级计划
{
静态void Main(字符串[]参数)
{
动态expando=新的ExpandoObject();
expando.SomeNewStringVal=“你好,勇敢的新呼啸!”;
控制台写入线(expando.SomeNewStringVal);
//更具扩展性的冷静/怪异:
var p=作为索引的expando;
p[“A”]=“新值1”;
p[“B”]=“新值2”;
控制台写入线(expando.A);
控制台写入线(expando.B);
}
}
这里有更好的答案:虽然他已经接受了,但我认为OP意味着DynamicObject和ExpandoObject之间的区别。请注意,这在现实世界中确实很有用。在序列化为xml或json之前,我只是使用它来创建动态响应对象。通过这种方式,我可以递归地添加具有不同属性名称的子类,而无需定义大量显式属性。“GroupsL1:[{”GroupingL2::[{…未寻址。MSDN:提供用于在运行时指定动态行为的基类。此类必须从继承;不能直接实例化。MSDN页面包含基于DynamicObject
的简化ExpandoObject
实现。因此,这两种类型都用于后期绑定,但ExpandoObject
是具体的(并且是密封的),而DynamicObject
只是自定义动态对象的基类。