即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

C#的动态类型ExpandoObject和DynamicObject

编程语言 qq_27825451 23℃ 0评论
一、ExpandoObject类型
     ExpandoObject表示一个对象,该对象包含可在运行时动态添加和移除的成员.这个类和动态类型有关,这个类能做些什么?
学过javascript的都知道,javascript里面有动态属性这个说法,现在C#里面同样有,具体的做法如下:
在使用这个类型之前,需要引入命名空间using System.Dynamic;



            dynamic obj = new ExpandoObject();


            obj.name = “菲菲”;


            obj.sex = “女”;


            obj.age = 24;


            obj.method = new Func((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((a,b)=> { return a * b; });                   //
添加动态方法
ExpandoObject这个类还是很有用的,他可以动态的添加成员和方法,这样我们就可以在写一些对象时,不需要在new一个class那么麻烦,只要这个类就OK,
不过有一点要注意,这个类时在运行时解析的,这样我们就会带来性能上的一些损失,而且,程序的逻辑复杂性越高,越难发现问题所在,所以,对于简单的对象,
我们可以使用这个类,复杂的就不要使用了。




二、另外还有几个重要的类型和接口



如下所示:



DynamicMetaObject
DynamicMetaObjectBinder


DynamicObject


IDynamicMetaObjectProvider
由于这些类使用比较少而且比较复杂,这里暂不做讨论,可以参见C#4.0的文档。

转载请注明:CodingBlog » C#的动态类型ExpandoObject和DynamicObject

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情