C#的动态类型ExpandoObject和DynamicObject
来源:互联网 发布:2016最近网络最火的dj 编辑:程序博客网 时间:2024/05/19 03:43
一、ExpandoObject类型
ExpandoObject表示一个对象,该对象包含可在运行时动态添加和移除的成员.这个类和动态类型有关,这个类能做些什么?
学过javascript的都知道,javascript里面有动态属性这个说法,现在C#里面同样有,具体的做法如下:
在使用这个类型之前,需要引入命名空间using System.Dynamic;
dynamic obj = new ExpandoObject();
obj.name = "菲菲";
obj.sex = "女";
obj.age = 24;
obj.method = new Func<int, int, int>((a,b)=> { return a * b; }); //添加动态方法
Console.WriteLine($"{obj.name} {obj.sex} {obj.age} {obj.method(100,200)}");
obj.name = "菲菲";
obj.sex = "女";
obj.age = 24;
obj.method = new Func<int, int, int>((a,b)=> { return a * b; }); //添加动态方法
Console.WriteLine($"{obj.name} {obj.sex} {obj.age} {obj.method(100,200)}");
在上面的代码中,dynamic相当于javascript中的var ,只是添加动态方法的时候有点区别,
javascript如下
obj.method=function(a,b){ return a*b;}
而在C#中由于函数本身并不是对象,但是我们可以通过“委托”去完成。如下:
obj.method = new Func<int, int, int>((a,b)=> { return a * b; }); //添加动态方法
ExpandoObject这个类还是很有用的,他可以动态的添加成员和方法,这样我们就可以在写一些对象时,不需要在new一个class那么麻烦,只要这个类就OK了,
不过有一点要注意,这个类时在运行时解析的,这样我们就会带来性能上的一些损失,而且,程序的逻辑复杂性越高,越难发现问题所在,所以,对于简单的对象,
我们可以使用这个类,复杂的就不要使用了。
二、另外还有几个重要的类型和接口
如下所示:
DynamicMetaObject
DynamicMetaObjectBinder
DynamicObject
IDynamicMetaObjectProvider
DynamicObject
IDynamicMetaObjectProvider
由于这些类使用比较少而且比较复杂,这里暂不做讨论,可以参见C#4.0的文档。
0 0
- C#的动态类型ExpandoObject和DynamicObject
- C#DynamicObject和ExpandoObject
- ExpandoObject DynamicObject 的用法
- C#高级编程七十二天----DynamicObject和ExpandoObject
- C#DynamicObject和ExpandoObject用法
- DLR之 ExpandoObject和DynamicObject的使用示例
- c#中DynamicObject类型的测试
- C# 4.0 特性: dynamic 和 ExpandoObject
- 浅谈Dynamic 关键字系列之三:ExpandoObject, DynamicObject, DynamicMetaObject
- C#4.0中的dynamic关键字和ExpandoObject对象
- 理解C# 4 dynamic(2) – ExpandoObject的使用
- 理解C# 4 dynamic(3) – DynamicObject的使用
- ExpandoObject的使用
- 浅谈Dynamic 关键字系列之三(上):ExpandoObject, DynamicObject, DynamicMetaObject
- 基于Visual Studio2010与C#4.0新功能和展望--dynamic:用DynamicObject创建包装器
- 通过动态对象(DynamicObject)实现不定数量列的数据存储与展示
- DynamicObject实现简单的AOP
- C# 4.0中的动态类型和动态编程
- C++知识点
- (自学收获)纯css网页小部件--轮播图效果
- poj 3261 Milk Patterns(后缀数组,二分)
- RecyclerView条目复用导致混乱的解决方案之一
- Linux操作系统概述
- C#的动态类型ExpandoObject和DynamicObject
- 指针详细总结
- Homework of English
- 有一种绝望叫做无限PE hzau 1207 Candies (华中农业大学第五届程序设计大赛网络同步赛 I题)
- 算法导论 练习题 10.2-8
- Unity Editor 基础篇(十二):更改Hierarchy面板物体显示
- vim utf-8 bom设置的问题
- Detecting Near-Duplicates for Web Crawling - simhash与重复信息识别
- UVa 227 Puzzle