C#的动态类型ExpandoObject和DynamicObject

一、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的文档。

你可能感兴趣的:(C#)