困惑于使用.NET3.5+;2.0站点中的功能

困惑于使用.NET3.5+;2.0站点中的功能,.net,.net,在VS2010中,我将我的目标框架设置为2.0。在代码中,它允许我使用var关键字以及隐式属性(public int Foo{get;set;}) 不仅如此,当我将dll上传到我的ASP.NET2.0站点时,该站点的代码运行良好 给出了什么?您正在混淆C#和.NET 这些都是C#3.0的特性。它们与您正在使用的.NET版本无关。var和隐式属性(“自动实现的属性”)是C#3.0的方面,而不是.NET。C#3.0和2.0都可以编译到.NET2.0,只有少数例外——换句话说,您提到的功能(以及其他一

在VS2010中,我将我的目标框架设置为2.0。在代码中,它允许我使用var关键字以及隐式属性(public int Foo{get;set;})

不仅如此,当我将dll上传到我的ASP.NET2.0站点时,该站点的代码运行良好


给出了什么?

您正在混淆C#和.NET


这些都是C#3.0的特性。它们与您正在使用的.NET版本无关。

var和隐式属性(“自动实现的属性”)是C#3.0的方面,而不是.NET。C#3.0和2.0都可以编译到.NET2.0,只有少数例外——换句话说,您提到的功能(以及其他一些功能)纯粹是语法上的糖分,可以编译到自.NET2.0以来可用的相同IL结构


Jon Skeet的在线“C#Depth”有一篇文章很好地解释了这一点。请注意,并非C#3.0的所有功能都可以在.NET 2.0中使用。

这可能是和/或的精确副本,两者都有一些很好的答案。因此,任何C#的未来版本都可以在任何以前版本的.NET上运行?当新功能出现时,编译器不需要升级吗?大多数编译器功能不需要框架或CLR的支持。例如,泛型需要CLR支持。自动属性不需要支持-编译器只是发明了一个支持字段,所以它们看起来就像“普通”属性。