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


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

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


2072


起源


这是理解一切的好资源之一。 en.wikipedia.org/wiki/C_Sharp_(programming_language)
第二段不应该是评论而不是问题,因为它不是问题的一部分 - TankorSmash
@TankorSmash:我认为这个问题的背景是非常重要的,值得保持它的位置。当然是IMO。 - Jon Skeet
@TankorSmash,因为这是一个自我回答的问题,所以解释(第二段)应该存在并且不会在评论中丢失。 - YoungCoconutCode


答案:


C#语言版本历史:

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

  • C#1.0 与.NET 1.0和VS2002一起发布(2002年1月)
  • C#1.2 (奇怪的是);与.NET 1.1和VS2003一起发布(2003年4月)。要调用的第一个版本 Dispose 上 IEnumerator实施的 IDisposable。其他一些小功能。
  • C#2.0 与.NET 2.0和VS2005一起发布(2005年11月)。主要新功能:泛型,匿名方法,可空类型,迭代器块
  • C#3.0 随.NET 3.5和VS2008发布(2007年11月)。主要新功能:lambda表达式,扩展方法,表达式树,匿名类型,隐式类型(var),查询表达式
  • C#4.0 随.NET 4和VS2010发布(2010年4月)。主要新功能:后期绑定(dynamic),委托和接口泛型方差,更多COM支持,命名参数,元组数据类型和可选参数
  • C#5.0 随.NET 4.5和VS2012一起发布(2012年8月)。 主要特点:异步编程,调用者信息属性。突破变化: 循环变量闭包
  • C#6.0 随.NET 4.6和VS2015发布(2015年7月)。实施者 罗斯林特征:自动实现属性的初始化程序,使用指令导入静态成员,异常过滤器,元素初始值设定项, await 在 catch 和 finally, 延期 Add 集合初始化器中的方法。
  • C#7.0 与.NET 4.7和VS2017一起发布(2017年3月)Major 新功能元组ref locals和ref return模式匹配 (包括基于模式的switch语句), 一致 out 参数声明地方职能二进制文字,数字分隔符,和 任意异步返回
  • C#7.1 随VS2017 v15.3发布(2017年8月)新功能: 异步主要元组成员名称推断默认表达式模式与泛型匹配
  • C#7.2 随VS2017 v15.5发布(2017年11月)新功能: 私有保护访问修饰符Span <T>,又名内部指针,又名stackonly结构其他一切
  • C#7.3 随VS2017 v15.7(2018年5月)发布。新功能: 枚举,代表和 unmanaged泛型类型约束ref 重新分配。不安全的改进: stackalloc 初始化,取消固定索引 fixed 缓冲区,自定义 fixed 声明。改进了重载分辨率。初始化器和查询中的表达式变量。 == 和 != 为元组定义。现在,属性可以定位自动属性的支持字段。
  • C#8.0 目前正在预览中。 预期的新功能不可为空的引用类型IAsyncEnumerable<T> 支持,范围和默认接口方法。

针对OP的问题:

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

没有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。

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

截至2017年5月3日,C#语言团队在其github存储库上创建了C#版本和功能的历史记录: C#语言版本中添加的功能。还有 跟踪即将推出的和最近实现的语言功能的页面


2402



@cvraman:我刚收到一封来自某人的电子邮件,他注意到该页面现已更改,并未将其称为CLR 4.5。版本控制不是很有趣吗? :) - Jon Skeet
@cvraman:我暂时离开它,因为我强烈怀疑 一些 地方仍然会把它称为4.5,它会... - Jon Skeet
对于那些建议包括并发集合的人:这是一个列表 语言 功能,而不是 骨架 特征。注意缺少提及WPF等。 - Jon Skeet
AFAIK是C#唯一稳定可靠的版本,名为Jon Skeet ......其余的只是数字:D - Carls Jr.
@alper:Unity不是特定版本的C#,而是.NET框架和/或运行时的特定版本。 IIRC,它在CLR v2上有效,但可能有.NET 3.5的某些方面。 - Jon Skeet


处理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 2.0(主要是从ECMA规范实现的.NET Framework 2.0版本)支持C#3.0语法和功能。


241



如此真实。但我不会称之为“问题”,而是“优势”。我的公司使用C#4.0的所有惊人功能构建了一个2.0应用程序 - 喜欢它。 - Alex
简而言之,C#版本绑定到编译器而不是.net框架。 - SHEKHAR SHETE


这与大多数答案相同,但是为了方便而制表,并且它具有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更多。


179



移动设备看起来很糟糕。 urgh! - Happypig375
如果在stackoverflow应用程序上看起来没问题 - Dileep
那么.NET Core版本呢? - Pac0
@ Pac0 .NET核心开发几乎与VS开发无关,很难跟踪(开源)。事实上,VS,.NET和.NET Core的所有内容都在快速迭代。 - nawfal


  • 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


164



C#5 CTP 安装在Visual Studio 2010之上。我们没有证据表明最终版本会这样做。请记住,LINQ CTP也安装在Visual Studio 2005上。 - Jon Skeet
是的,同意,除非Visual Studio的下一版本出现,微软将主动采取行动。 - iTSrAVIE


_____语言规范______MICROSOFT编译器

C# 1.0/1.2____2001年12月/ 2003___________2002年1月

C#2.0_______2005年9月________________2005年11月

C#3.0_______2006年5月_____________________2006年11月

C#4.0_______2009年3月(草案)______________2010年4月

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

C#6.0;随.NET 4.6 2015发布

C#7.0;随.NET 4.7 2017发布


63



你在2002年12月从哪里获得C#2.0语言规范?同样是2006年6月的C#4?你确定你不是在谈论完全不同的ECMA版本吗? - Jon Skeet
请参阅以下链接 en.wikipedia.org/wiki/C_Sharp_(programming_language) - Pramodh


您可以查看最新的C#版本 这里 C# Versions


36





C#版本历史:

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

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

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

Enter image description here

最新版本的C#可用于 C#版本


35





我已经总结了这个表中的大多数版本。唯一缺少的应该是ASP.NET Core版本。我还添加了不同版本的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)计划发布?

Version


32



我不确定在同一个表中使用MVC是否有帮助,说实话......它只是在一个单独的发布计划中,有效。 - Jon Skeet
@Jon这是真的,只是在这里为可能需要它的人添加它,因为我确实试图找出.NET框架的相应发布日期,以便我更好地理解整个版本的历史。 - Mindless


比较MSDN文章 “C#2.0语言和编译器的新功能” 和“Visual C#2005中的新功能“,有可能推断出”C#major_version.minor_version“是根据编译器的版本编号创造的。

C#1.2对应于.NET 1.1和VS 2003 并且还命名为 Visual C#.NET 2003

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

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

C#2.0 是...的同义词 Visual C#2005

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


24



不,如果您真的想使用该编号,则对应于.NET 3.5的C#被命名为“Visual C#2008”。 C#3.0功能在“Visual C#2008”中引入,这就是为什么在您链接到的页面上,它们位于“Visual C#2008的原始发行版本中的新功能”之下。一般来说,使用Visual Studio版本号是一个坏主意,因为当你使用Mono进行构建时,它几乎没有意义。 C#语言具有明确指定的版本号...我们知道哪个Visual C#产品最初引入了该版本的C#,但它们不是同一个东西。 - Jon Skeet
@JonSkeet,不,我没有。想要问你(和另一个回答者)更新你的答案,但由于我的评论过于冗长,我决定作为答案。感谢您的信息 - Gennady Vanin Геннадий Ванин
我不认为C#3.0可以在VS 2005上运行。 - nawfal