.NET中的动态语言运行时与CIL编程
1. 动态语言与动态语言运行时(DLR)
动态语言和运行时虽然可能会带来运行时错误,但它们也具备一些有趣的特性:
- 极其灵活的代码库:无需对数据类型进行大量更改就能重构代码。
- 与不同平台和编程语言构建的各种对象类型进行交互的简单方法。
- 能够在运行时在内存中为类型添加或移除成员。
动态语言运行时(DLR)的一个重要作用是让各种动态语言能在 .NET 运行时中运行,并与其他 .NET 代码进行交互。这些语言处于动态环境中,类型仅在运行时才能确定。而且,它们可以访问丰富的 .NET 基类库。借助 dynamic 关键字,它们的代码库还能与 C# 代码相互操作。
1.1 表达式树的作用
DLR 利用表达式树以中立的方式捕获动态调用的含义。例如,以下 C# 代码:
dynamic d = GetSomeData();
d.SuperMethod(12);
在这个例子中,DLR 会自动构建一个表达式树,实际上表示“在对象 d 上调用名为 SuperMethod 的方法,并传入数字 12 作为参数”。这个信息(正式术语为有效负载)随后会被传递给正确的运行时绑定器,它可能是 C# 动态绑定器,甚至可能是旧的 COM 对象。
从这里开始,请求会被映射到目标对象所需的调用结构。这些表达式树的优点在于(除了无需手动创建它们之外),它允许你编写固定的 C# 代码语句,而无需担
超级会员免费看
订阅专栏 解锁全文

47

被折叠的 条评论
为什么被折叠?



