我不明白它是如何工作的 - 我正在使用 VS2008 并使用 var 关键字等 3.0 语言功能。
但我可以针对 2.0 框架版本进行编译和运行
这怎么可能?
编辑:是否有定义 CLR、框架和语言功能以及向后兼容性的网站 - 我对所有这些感到很困惑
最佳答案
有些语言特性只是编译器很聪明——var
就是其中之一。编译后的代码没有任何痕迹表明该变量是通过 var
声明的。
其他功能(例如扩展方法)需要框架的支持。扩展方法通过 ExtensionAttribute
识别和通告。同样,表达式树需要 Expression
类及其子类。
一些其他功能也需要 CLR 支持 - C# 2 中的泛型是最明显的例子。 C# 3 中的所有功能都不需要 CLR 支持; .NET 3.5 附带了一个 CLR 服务包,但没有重大变化。我怀疑在一些极端情况下,v2 CLR 之前的某些表达式树会出现问题。 (我认为 DynamicMethod
在内部发生了一些变化,虽然我不记得细节了。)也可能有一些可验证性调整。
我有一个 article它描述了在面向 .NET 2 时可以使用 C# 3 中的哪些功能。我将很快扩展它以包括 C# 4。
关于C# 3.0 目标 2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3336622/