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

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

 2010-09-30 22:46:36 来源:WEB开发网   
核心提示: l基于DLR实现的动态语言(比如IronRuby和IronPython)所创建的对象,从C#程序员角度来看,C# 4动态编程新特性与DLR剖析(6),所有这四种对象都是一样的,都可用一个dynamic变量引用之,因此,有时又称其为“表达式树(Expression Tree)&rdqu

l 基于DLR实现的动态语言(比如IronRuby和IronPython)所创建的对象。

从C#程序员角度来看,所有这四种对象都是一样的,都可用一个dynamic变量引用之,而DLR在程序运行时动态地将方法调用和字段存取请求“绑定”到真正的对象上。

dynamic的功能是由DLR所支撑的,是C#编译器与DLR分工合作的成果。

请看以下示例代码:

    dynamic d = 100;
    d++;

C#编译器在处理上述代码时,它并不去检查变量d是否可以支持自增操作,而是为其创建了一个CallSite<T>对象(<>p__Site1):

    private static class <Main>o__SiteContainer0 {
        public static CallSite<Func<CallSite, object, object>> <>p__Site1;
    }

中文MSDN将CallSite<T>译为“动态(调用)站点”,它是DLR中的核心组件之一。

动态站点对象通过CallSite<T>.Create()方法创建, C#编译器会为其指定一个派生自CallSiteBinder的对象(称为“动态站点绑定对象”)作为其参数。

动态站点绑定对象是与具体语言相关的,比如IronPython和C#都有各自的动态站点绑定对象。

动态站点绑定对象的主要工作是将代码中的动态表达式(本例中为d++)转换为一棵“抽象语法树(AST:Abstract Syntax Tree)”,这棵语法树被称为“DLR Tree”,是在.NET 3.5所引入的LINQ表达式树的基础上扩充而来的,因此,有时又称其为“表达式树(Expression Tree)”

DLR在内部调用此表达式树的Compile()方法生成IL指令,得到一个可以被CLR所执行的委托(在本例中其类型就是Func<CallSite, object, object>)。

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

Tags:动态 编程 特性

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