是否有适用于.Net 3.5的C#4.0的更改列表?

我最近看到很多C#4.0的变化。 我真的很喜欢他们中的一些。 但是,我还是不想因兼容性原因而转向.Net 4.0。

那么,是否有一个全新的C#4.0语言function列表可以在.Net 3.5或更低版本上运行?

例如,默认参数是否需要.NET 4.0 CLR,还是它们是编译器function? 可以使用自动属性(C#3.0特性)并仍然以.NET 2.0为目标,因为它不需要Framework支持,但不使用LINQ表达式,因为它确实需要Framework 3.5。

请不要说“当然C#4.0在.Net 3.5中不起作用,因为它更老了”

4.0中的C#编译器附带了一个新的多目标function。 简短的版本是它将生成一个程序集,其中包含定义System.Object(通常是mscorlib.dll)的引用中存在的任何元数据版本。 这允许您使用它来编译2.0和3.5的程序集,以及各种版本的Silverlight。 引入此function是为了支持Visual Studio 2010中的多目标。

因此,您可以使用C#4.0编译器来编译3.5程序集,并使用您想要的任何C#4function,只要没有对4.0库的特定依赖。 例如,命名参数和可选参数可以正常工作,因为它们不使用任何4.0框架function。 然而,动态,但开箱即用它不适用于3.5。

这里有一篇关于这个的post,涵盖了基础知识。

http://blogs.msdn.com/ed_maurer/archive/2010/03/31/multi-targeting-and-the-c-and-vb-compilers.aspx

短名单(来自Ed的post)是:

  • 命名参数和可选参数
  • 某些COM语法改进(例如,“省略ref”)
  • 通用方差

不起作用的东西包括动态和非pia(我们在实施它们的时间方面的两个最大支出)。 前者需要框架支持,后者需要运行时支持。

我知道协方差和逆变通过IL注释+和 – 在CLR 2.0中的类型参数中得到了一些支持。 但不确定其他function。

它不是一个列表,也不是确定的,但作为一个例子,我只是建立了一个新的VS2010项目,目标是.NET 3.5并成功创建了一个带有默认参数的方法,并使用命名参数调用它,这两个参数都是C#4.0特性。

考虑到默认参数已经是VB.NET的一个特性,C#可能只是在编译器级别实现它。 然而,CLR团队可能已经完全采用了一种全新的方式。

您应该准备好修改您的问题,以声明“C#4.0的哪些function是适用于.NET 3.5框架的编译器更改”

我正在考虑对“旧”规范的更改…… lock更改将不可用,因为这需要新的重载 – 但“类似字段的事件”更改 应该有效。 我将不得不检查编译器发出的内容;-p

果然:

 using System; class Program { public event EventHandler SomeHandler; static void Main() { } } 

得到新式的访问器;-p