提问



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


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

最佳参考


C#语言版本历史:



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



  • C#1.0 与.NET 1.0和VS2002(2002年1月)一起发布

  • C#1.2 (奇怪的是);与.NET 1.1和VS2003一起发布(2003年4月)。在实现IDisposableIEnumerator上调用Dispose的第一个版本。其他一些小功能。

  • C#2.0 与.NET 2.0和VS2005一起发布(2005年11月)。主要新功能:泛型,匿名方法,可空类型,迭代器块

  • C#3.0 与.NET 3.5和VS2008一起发布(2007年11月)。主要新功能:lambda表达式,扩展方法,表达式树,匿名类型,隐式类型(var),查询表达式

  • 随着.NET 4和VS2010(2010年4月)发布,
  • C#4.0 。主要新功能:后期绑定(dynamic),委托和接口通用方差,更多COM支持,命名参数,元组数据类型和可选参数

  • C#5.0 随.NET 4.5和VS2012一起发布(2012年8月)。主要功能:异步编程,来电信息属性。突破变化:循环变量闭包。

  • 随着.NET 4.6和VS2015(2015年7月)发布的
  • C#6.0 。由Roslyn实施。功能:自动实现属性的初始化程序,使用指令导入静态成员,异常过滤器,元素初始值设定项,catchfinally中的await,集合初始值设定项中的扩展Add方法。

  • .NET 4.7和VS2017发布的
  • C#7.0 (2017年3月)主要新功能:元组,ref本地和ref返回,模式匹配(包括基于模式的switch语句),inline out参数声明,本地函数,二进制文字,数字分隔符和任意异步返回。

  • 随VS2017 v15.3发布的
  • C#7.1 (2017年8月)新功能:async main,元组成员名称推断,默认表达式,与泛型匹配的模式。

  • 随VS2017 v15.5发布的
  • C#7.2 (2017年11月)新功能:私有保护访问修饰符,Span< T>,又称内部指针,又名堆栈结构,其他所有内容。

  • 随着VS2017 v15.7(2018年5月)发布,
  • C#7.3 。新功能:枚举,委托和unmanaged泛型类型约束。 ref重新分配。不安全的改进:stackalloc初始化,未固定的索引fixed缓冲区,自定义fixed语句。改进了重载分辨率。初始化器和查询中的表达式变量。 ==!=为元组定义。自动属性支持字段现在可以通过属性进行定位。

  • C#8.0 目前正在预览中。预期的新功能:不可为空的引用类型,IAsyncEnumerable<T>支持,范围和默认接口方法。



回应OP的问题:




  C#的正确版本号是什么?什么时候出来?为什么我找不到关于C#3.5的答案?[33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54]



没有C#3.5这样的东西 - 这里引起混淆的原因是.NET 3.5中存在C#3.0。然而,语言和框架是独立版本的 - 就像CLR一样,.NET 2.0到.NET 2.0版本为2.0,.NET 4引入了CLR 4.0,尽管服务包也是如此。 .NET 4.5中的CLR有各种改进,但版本控制还不清楚:在某些地方它可能被称为CLR 4.5(例如,这个MSDN页面用于指代它),但Environment.Version财产仍然报告4.0.xxx。[55] [56]


有关语言,运行时和框架版本之间关系的更多详细信息,请参阅深度网站中的C#。这包括有关在面向.NET 2.0时可以使用哪些C#3.0功能的信息。 (如果有人想将所有内容都纳入这个wiki答案,那么欢迎他们参加。)[57]


截至2017年5月3日,C#语言团队在其github repo上创建了C#版本和功能的历史:C#语言版本中添加的功能。还有一个页面可以跟踪即将推出的和最近实现的语言功能。[58] [59]

其它参考1


处理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的代码语法/功能的方式相同。[60]


看看Mono,你会发现Mono 2.0(主要是从ECMA规范实现的.NET Framework 2.0版本)支持C#3.0语法和功能。[61]

其它参考2


这与大多数答案相同,但是为了方便而制表,并且它具有Visual Studio和.NET版本以实现完整性。


 ╔════════════╦════════════╦══════════════╦═════════════╦══════════════╗
║ C# version ║ VS version ║ .NET version ║ CLR version ║ Release date ║
╠════════════╬════════════╬══════════════╬═════════════╬══════════════╣
║    1.0     ║    2002    ║    1.0       ║     1.0     ║   Feb 2002   ║
║    1.2     ║    2003    ║    1.1       ║     1.1     ║   Apr 2003   ║
║    2.0     ║    2005    ║    2.0       ║     2.0     ║   Nov 2005   ║
║            ║            ║    3.0       ║     2.0     ║   Nov 2006   ║
║    3.0     ║    2008    ║    3.5       ║     2.0     ║   Nov 2007   ║
║    4.0     ║    2010    ║    4.0       ║     4       ║   Apr 2010   ║
║    5.0     ║    2012    ║    4.5       ║     4       ║   Aug 2012   ║
║    5.0     ║    2013    ║    4.5.1     ║     4       ║   Oct 2013   ║
║            ║            ║    4.5.2     ║     4       ║   May 2014   ║
║    6.0     ║    2015    ║    4.6       ║     4       ║   Jul 2015   ║
║            ║            ║    4.6.1     ║     4       ║   Nov 2015   ║
║            ║            ║    4.6.2     ║     4       ║   Aug 2016   ║
║    7.0     ║    2017    ║              ║             ║   Mar 2017   ║
║            ║            ║    4.7       ║     4       ║   May 2017   ║
║    7.1     ║ 2017(v15.3)║              ║             ║   Aug 2017   ║
║            ║            ║    4.7.1     ║     4       ║   Oct 2017   ║
║    7.2     ║ 2017(v15.5)║              ║             ║   Dec 2017   ║
║            ║            ║    4.7.2     ║     4       ║   Apr 2018   ║
║    7.3     ║ 2017(v15.7)║              ║             ║   May 2018   ║
╚════════════╩════════════╩══════════════╩═════════════╩══════════════╝
 


注意:.NET开发现在几乎与VS无关,每个版本之间没有相关性。请参阅:https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/versions-and-dependencies了解更多信息。[62]

其它参考3



    使用Visual Studio.NET
  • C#1.0

  • 使用Visual Studio 2005
  • C#2.0

  • 使用Visual Studio 2008
  • C#3.0

  • 使用Visual Studio 2010
  • C#4.0

  • 使用Visual Studio 2012
  • C#5.0

  • 使用Visual Studio 2015
  • C#6.0

  • 使用Visual Studio 2017
  • C#7.0


其它参考4


版本_____语言规范______ MICROSOFT编译器[63]


C#1.0/1.2 ____ 2001年12月?/2003 ? ___________ 2002年1月? [64] [[[65]


C#2.0 _______ 2005年9月________________ 2005年11月? [66]


C#3.0 _______ 2006年5月_____________________ 2006年11月? [67]


C#4.0 _______ 2009年3月(草案)______________ 2010年4月? [68]


C#5.0;于2012年8月与.NET 4.5一起发布


C#6.0;随.NET 4.6 2015发布


C#7.0;随.NET 4.7 2017发布

其它参考5


您可以在此处查看最新的C#版本
[69]

其它参考6


C#版本历史记录:


C#是Microsoft开发的一种简单而强大的面向对象编程语言。


自2002年首次发布以来,C#已经发展很多。随着.NET Framework 1.0引入了C#。


下表列出了每个C#版本中引入的重要功能。


[70]


最新版本的C#可在 C#Versions 中找到。[71]

其它参考7


我已经总结了这个表中的大多数版本。唯一缺少的应该是ASP.NET核心版本。我还添加了不同版本的ASP.NET MVC。


请注意,ASP.NET 5已更名为ASP.NET Core 1.0,ASP.NET MVC 6已更名为ASP.NET Core MVC 1.0.0。我相信这种变化发生在2016年1月左右。


我已经在表中包含了ASP.NET 5 RC1的发布日期,但我还没有包含ASP.NET核心1.0和其他核心版本,因为我无法找到确切的发布日期。您可以在此处阅读有关ASP.NET Core的发布日期的更多信息: ASP.NET Core 1.0(ASP.NET 5/vNext)何时计划发布?


[73]

其它参考8


比较MSDN文章C#2.0语言和编译器中的新内容和Visual C#2005中的新内容,可以推断C#major_version.minor_version是根据编译器的版本创建的。编号。[74] [75]


C#1.2对应于.NET 1.1和VS 2003,也称为Visual C#.NET 2003。[76] [77]


但进一步微软停止增加次要版本(在点之后)数字或使它们不为零,0。虽然应该注意,对应于.NET 3.5的C#在msdn.microsoft.com中被命名为Visual C#2008 Service Pack 1。[78]


有两个并行的命名:主要的.NET/编译器版本编号和Visual Studio编号。


C#2.0是Visual C#2005 [79] [80]的同义词


C#3.0对应(或更准确地说,可以定位):



  • .NET 2.0< ==> [81] Visual C#2005

  • .NET3.0< ==> Visual C#2008

  • .NET 3.5< ==> [82] Visual C#2008 Service Pack 1