关于DLR的一些问题

时间:2010-07-21 12:49:21

标签: c# dynamic c#-4.0 dynamic-language-runtime

是否将动态类型上的所有操作都分派到DLR?从this video来看,它看起来很像,但是他们并没有用这么多的话说出来,我只是想确保声明是正确的,因为我正准备在一些沟通中写下它。

他们还说DLR目前在System.Core.dll中。

我想知道DLR是否有自己的程序集或命名空间。

我正在浏览DLR source,看起来确实它存在于Microsoft.Scripting.dll中,但我无法确定。 DLR是否也附带.NET 3.5?

4 个答案:

答案 0 :(得分:4)

是的,dynamic operations are implemented by the DLR

DLR没有附带.NET 3.5。

旧命名空间适用于不包含DLR的CLR版本,例如3.5 SP 1.还适用于.NET 4中未包含的新DLR功能。

答案 1 :(得分:2)

不,DLR Codeplex源不是.NET 4.0框架中的源代码。反正不是直接的。我在System.Core.dll程序集,System.Dynamic命名空间中看到它的大块。移动代码与DLR源相同的程度很难得到猜测。它粗略地看起来很相似,但你需要一把细齿梳子才能确定。 4.0源代码可以从参考源获得,而不是一种格式,可以很容易地在源代码文件上运行差异。对ExpandoClass.cs进行抽查显示,它们几乎与4.0版本中添加的(不必要的)using指令完全相同。鉴于以前在DLR上完成的工作量,我估计这些变化相对较小。

请注意,编译器生成的调用与DLR之间存在中间层。它首先遍历Microsoft.CSharp.dll程序集中的类,即C#语言的绑定程序。确切地说,粘合剂结束并且DLR开始的地方很难进行逆向工程。绑定器代码易于阅读并且做了很多工作。对System.Dynamic命名空间中的方法的调用是交织在一起的。并且它的源代码不能从参考源获得。

考虑到活页夹中的代码量,我对你的问题的回答“是分配给DLR的动态类型的所有操作”将是:不,可能不是所有

答案 2 :(得分:2)

当您使用带有“动态”的C#时,一个重要的播放器是C#运行时绑定器。该组件不是DLR的一部分,但其功能完全取决于DLR基础设施。它位于程序集Microsoft.CSharp.dll。

答案 3 :(得分:1)