什么是C#的正确版本号?
什么是C#的正确版本号? 什么时候出来? 为什么我找不到关于C#3.5的任何答案?
这个问题主要是为了帮助那些正在使用不正确的版本号寻找答案的人,例如C#3.5 。 希望任何没有找到错误版本号的答案的人都会找到这个问题,然后用正确的版本号再次搜索。
这些是在撰写本文时已知的C#版本:
IDisposable
IEnumerator
上调用Dispose
第一个版本。 其他一些小功能。 var
),查询表达式 dynamic
),委托和接口通用方差,更多COM支持,命名参数,元组数据类型和可选参数 await
catch
, finally
在集合初始化程序中Add
扩展方法。 out
参数声明,局部函数,二进制文字,数字分隔符,和任意的异步返回。 没有C#3.5这样的东西 - 这里引起混淆的原因是.NET 3.5中存在C#3.0。 然而,语言和框架是独立版本的 - 就像CLR 2.0版本的.NET 2.0到3.5,.NET 4引入了CLR 4.0,尽管如此。 .NET 4.5中的CLR有各种改进,但版本控制尚不清楚:在某些地方,它可能被称为CLR 4.5(例如,此MSDN页面用于引用它),但Environment.Version
属性仍然报告4.0.xxx。
有关语言,运行时和框架版本之间关系的更详细信息,请参阅C#深入网站。 这包括有关针对.NET 2.0可以使用哪些C#3.0功能的信息。 (如果有人想把所有的内容带入这个wiki的答案,他们欢迎。)
截至2017年5月3日,C#语言团队在其github仓库中创建了C#版本和功能的历史记录:以C#语言版本添加的功能
处理C#版本号时遇到的最大问题是它与.NET Framework的版本无关,这似乎是由于Visual Studio和.NET Framework之间的同步版本所致。
C#的版本实际上绑定到编译器,而不是框架。 例如,在Visual Studio 2008中,您可以编写C#3.0并以.NET Framework 2.0,3.0和3.5为目标。 C#3.0命名法以与ANSI C89,C90,C99描述C语言的代码语法相同的方式描述了代码语法的版本和支持的功能。
看看Mono,你会发现Mono 2.0(主要是ECMA规范中实现的.NET Framework 2.0版本)支持C#3.0语法和功能。
C#1.0与Visual Studio.NET
C#2.0与Visual Studio 2005
C#3.0与Visual Studio 2008
C#4.0与Visual Studio 2010
C#5.0与Visual Studio 2012
C#6.0与Visual Studio 2015
C#7.0与Visual Studio 2017