WEB开发网
开发学院软件开发C语言 C# 4动态编程新特性与DLR剖析 阅读

C# 4动态编程新特性与DLR剖析

 2010-09-30 22:46:36 来源:WEB开发网   
核心提示: dynamic dynamicObj = new ExpandoObject();这一对象的奇特之处在于,我们可以随时给它增加新成员:dynamicObj.Value=100;//添加字段dynamicObj.Increment=newAction(()=>dynamicObj.Value

  dynamic dynamicObj = new ExpandoObject();

这一对象的奇特之处在于,我们可以随时给它增加新成员:

    dynamicObj.Value = 100; //添加字段
    dynamicObj.Increment = new Action(() => dynamicObj.Value++); //添加方法

这些动态添加的成员与普通的类成员用法一样:

    for (int i = 0; i < 10; i++)
        dynamicObj.Increment();//调用方法
    Console.WriteLine("dynamicObj.Value={0}",dynamicObj.Value);//访问字段

ExpandoObject对象实现了IDictionary<string, object>接口,可看成是一个字典对象,所有动态添加的成员都是这个字典对象中的元素,这意味我们不仅可以添加新成员,还可以随时移除不再需要的成员:

    //移除Increment方法
    (dynamicObj as IDictionary<string, object>).Remove("Increment");

方法移除之后,再尝试访问此方法将引发RuntimeBinderException异常。

(2)使用dynamic关键字简化与COM组件交互的代码

要在.NET这个“托管世界”里调用“非托管世界”中的COM组件,我们必须通过 “互操作程序集(Interop Assembly)”作为桥梁,“互操作程序集”定义了CLR类型与COM类型之间的对应关系。

只要给.NET项目添加对“互操作程序集”的引用,就可以在.NET应用程序中创建这一程序集所包容的各种类型的实例(即COM包装器对象),对这些对象的方法调用(或对其属性的存取)将会被转发给COM组件。

以调用Word为例,在C# 4.0之前您可能经常需要编写这样的代码:

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:动态 编程 特性

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接