自.NET 2.0以来,.Net IL是否有任何变化?

6

我之前听说过 .Net 3.5 编译的IL没有任何变化。在仔细考虑了我所知道的所有编译器功能后,事实上似乎它们都可以使用旧的IL实现,但我找不到官方来源来证实这个说法。这是真的吗?


8
你为什么问我为什么问? - sblom
附加问题:我知道4.0肯定有一个新的CLR,但它是否有任何IL更改? - Max Strini
3个回答

5

我认为在IL方面并没有什么变化,但CLR实现内部发生了显著变化,以使动态方法更加高效,允许表达式树编译等。我记得在构建动态方法的安全性方面也发生了变化,使得即使在相对低信任环境中生成表达式树的lambda表达式也能调用私有方法。编译器知道调用私有方法是有效的,因为源代码编译时可以访问它。然而,证明这一点是棘手的 :) 请参见Eric Lippert的这篇笔记


IL并没有改变,但编译器已经更新。我们注意到,WCF中的内部工具会为代理等创建不同的C#代码,这将在编译时产生不同的IL。请参阅Soma的日志条目(http://blogs.msdn.com/somasegar/archive/2006/05/18/601354.aspx)中有关“红位”和“绿位”的讨论。 - Jeremy McGee

0

自从.NET 2.0以来,运送的CLR(版本2.0.50727)没有发生变化,因此您的IL代码是相同的。(另请参阅this SO QA


1
不,CLR本身已经改变了——我相信.NET 2.0 SP1的一部分是CLR的改变。 - Jon Skeet
自.NET Framework 2.0发布以来,Version 2.0.50727 CLR已经发布了多个版本。原始RTM版本是Version 2.0.50727.42。在我的机器上(Vista SP2),完整版本是Version 2.0.50727.4016。然而,据我所知,自原始版本以来没有进行任何功能更改。 - Peter Stuer

0

因此,如果您愿意,您可以在.NET 2.0项目中使用许多.NET 3.5功能,只要您使用最新的编译器:

  • 自动属性
  • 扩展方法(需要一些小技巧)
  • 对象初始化程序
  • 类型推断(var关键字)
  • Lambda表达式

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接