我不明白这是如何工作的 - 我正在使用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内部有点改变,虽然我记不起细节了.)也可能有一些可验证的调整.
我有一篇文章描述了在针对.NET 2时可以使用C#3中的哪些功能.我将很快将其扩展为包含C#4.
原因是使用大多数 3.0 功能的 C# 编译器生成的二进制文件与 2.0 运行时兼容。CLR 并不关心您使用的是什么语言或该语言的版本,只关心二进制文件与其规范兼容。
关键字var是最简单的情况,因为它只是推断局部变量的类型。然后编译器将显式类型写入二进制文件。因此,就发出的 IL 而言,以下 2 行是等效的
var x = 42;
int x = 42;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
194 次 |
| 最近记录: |