C# · 12月 22, 2021

C#3.0定位2.0

我不明白这是如何工作的 – 我正在使用VS2008并使用像var关键字这样的3.0语言功能.

然而,我可以编译并运行2.0框架版本

怎么可能?

编辑:是否有一个网站定义CLR,框架和语言功能和向后兼容性 – 我很困惑所有这些

解决方法 一些语言功能只是编译器是智能的 – var就是其中之一.编译后的代码没有迹象表明变量是通过var声明的.

其他功能(例如扩展方法)需要框架的支持.扩展方法通过ExtensionAttribute识别和公布.同样,表达式树需要Expression类及其子类.

其他一些功能也需要CLR支持–C#2中的泛型是最明显的例子. C#3中没有任何功能完全需要CLR支持; .NET 3.5附带一个Service Pack到CLR,但没有重大更改.我怀疑有一些极端情况,v2 CLR之前会遇到一些表达式树的问题. (我认为DynamicMethod在内部发生了一些变化,虽然我不记得细节.)可能还有一些可验证的调整.

我有一个article,它描述了在面向.NET 2时可以使用C#3中的哪些功能.我将尽快扩展它以包含C#4.