什么是C#的正确版本号?

什么是C#的正确版本号? 什么时候出来? 为什么我找不到关于C#3.5的任何答案?

这个问题主要是为了帮助那些正在使用不正确的版本号寻找答案的人,例如C#3.5 。 希望任何没有找到错误版本号的答案的人都会找到这个问题,然后用正确的版本号再次搜索。


这些是在撰写本文时已知的C#版本:

  • .NET 1.0和VS2002发布的C#1.0 (2002年1月)
  • C#1.2 (奇怪的是); 随.NET 1.1和VS2003发布(2003年4月)。 在调用IDisposable IEnumerator上调用Dispose第一个版本。 其他一些小功能。
  • C#2.0随.NET 2.0和VS2005发布(2005年11月)。 主要的新功能:泛型,匿名方法,可空类型,迭代器块
  • .NET 3.5和VS2008(2007年11月)发布的C#3.0 。 主要新功能:lambda表达式,扩展方法,表达式树,匿名类型,隐式类型( var ),查询表达式
  • .NET 4和VS2010发布的C#4.0 (2010年4月)。 主要新功能:后期绑定( dynamic ),委托和接口通用方差,更多COM支持,命名参数,元组数据类型和可选参数
  • C#5.0与.NET 4.5和VS2012(2012年8月)一起发布。 主要功能:异步编程,来电者信息属性。 突破变化:循环变量关闭。
  • 随.NET 4.6和VS2015发布的C#6.0 (2015年7月)。 由Roslyn实施。 特性:自动实现的属性的初始值设定项,使用指令导入静态成员,异常过滤器,元素初始值设定项, await catchfinally在集合初始化程序中Add扩展方法。
  • .NET 4.7和VS2017发布的C#7.0 (2017年3月)主要新特性:元组,ref本地和ref返回,模式匹配(包括基于模式的switch语句),内联out参数声明,局部函数,二进制文字,数字分隔符,和任意的异步返回。
  • C#7.1随VS2017 v15.3发布(2017年8月)次要新功能:async main,元组成员名称推断,默认表达式,与泛型模式匹配。
  • C#7.2随VS2017 v15.5发布(2017年11月)次要新功能:私有受保护的访问修饰符,Span <T>,又名内部指针,又名堆栈结构,其他所有内容。
  • 没有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

  • 链接地址: http://www.djcxy.com/p/481.html

    上一篇: What are the correct version numbers for C#?

    下一篇: Convert JavaScript String to be all lower case?