.NET 宿主程序中。 (1)动态对象通讯协议 (1)动态对象通讯协议 由于各种动态编程语言之间的特性相差极大, 实现各语言间的互操作是个难 题。为此 DLR 采取了一个聪明的策略,它不去尝试设计一个“通用的类型系统” (CLR 就是这么干的),而是设计了一个“通用的对象通讯协议”,规定所有需要 互操作的动态对象必须实现 IDynamicMetaObjectProvider 接口,此接口定义了
一个 GetMetaObject()方法, 接收一个语法树对象作为参数, 向外界返回一个 “动 态元数据(DynamicMetaObject)”对象: DynamicMetaObject GetMetaObject(Expression parameter);
DynamicMetaObject 对象向外界提供了两个重要属性: Restrictions 引用一 组测试条件,Expression 属性则引用一个语法树。这两个属性组合起来就是可 供动态站点对象缓存的“规则(Rule)”。 DLR 中的 “动态站点绑定对象(CallSiteBinder)” 获取了 DynamicMetaObject 对象之后,它调用此对象所提供的各个方法创建“规则”,让“动态站点对象 (CallSite)”的 Target 属性引用它,完成动态绑定的工作。 (2)动态语言集成环境 (2)动态语言集成环境 动态语言集 为了方便地实现静态编程语言与各种动态编程语言间的相互集成,DLR 提供 了一整套