C#的正确版本号是什么?什么时候出来?为什么我找不到关于 C# 3.5 的任何答案?
这个问题主要是为了帮助那些使用不正确的版本号搜索答案的人,例如 C# 3.5 . 希望是任何未能找到错误版本号的答案的人都会找到这个问题,然后再使用正确的版本号进行搜索 .
这些是在撰写本文时已知的versions of C#:
C# 1.0 与.NET 1.0和VS2002一起发布(2002年1月)
C# 1.2 (奇怪的是);与.NET 1.1和VS2003一起发布(2003年4月) . 在 IEnumerator 上调用 Dispose 的第一个版本实现了 IDisposable . 其他一些小功能 .
IEnumerator
Dispose
IDisposable
C# 2.0 与.NET 2.0和VS2005一起发布(2005年11月) . 主要新功能:泛型,匿名方法,可空类型,迭代器块
C# 3.0 与.NET 3.5和VS2008一起发布(2007年11月) . 主要新功能:lambda表达式,扩展方法,表达式树,匿名类型,隐式类型( var ),查询表达式
var
C# 4.0 与.NET 4和VS2010一起发布(2010年4月) . 主要新功能:后期绑定( dynamic ),委托和接口通用方差,更多COM支持,命名参数,元组数据类型和可选参数
dynamic
C# 5.0 随.NET 4.5和VS2012一起发布(2012年8月) . Major features:异步编程,来电者信息属性 . 突破变化:loop variable closure .
C# 6.0 与.NET 4.6和VS2015一起发布(2015年7月) . 由Roslyn实施 . Features:自动实现属性的初始值设定项,使用指令导入集合初始值设定项中的静态成员,异常过滤器,元素初始值设定项, catch 和 finally ,扩展 Add 方法 .____9 C# 7.0 与.NET 4.7和VS2017一起发布(2017年3月)主要new features:tuples,ref locals and ref return,pattern matching(包括基于模式的switch语句),inline out parameter declarations,local functions,binary literals, digit separators和arbitrary async returns .209 C# 7.1 与VS2017 v15.3一起发布(2017年8月)新功能:async main,tuple member name inference,default expression,pattern matching with generics .209 C# 7.2 随VS2017 v15.5发布(2017年11月)新功能:private protected access modifier,Span<T>, aka interior pointer, aka stackonly struct,everything else .209 C# 7.3 随VS2017 v15.7(2018年5月)发布 . 新功能:enum, delegate and unmanaged generic type constraints . ref 重新分配 . 不安全的改进: stackalloc 初始化,取消固定索引 fixed 缓冲区,自定义 fixed 语句 . 改进了重载分辨率 . 初始化器和查询中的表达式变量 . == 和 != 为元组定义 . 现在,属性可以定位自动属性的支持字段 .
catch
finally
Add
ref
stackalloc
fixed
==
!=
C# 8.0 目前处于预览状态 . Expected new features:Non-nullable reference-types, IAsyncEnumerable<T> support,Ranges和默认接口方法 .
IAsyncEnumerable<T>
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(例如,this MSDN page用于指代它),但Environment.Version属性仍然报告4.0.xxx .
有关语言,运行时和框架版本之间关系的更多详细信息,请访问C# in Depth网站 . 这包括有关在面向.NET 2.0时可以使用哪些C#3.0功能的信息 . (如果有人想将所有内容都纳入此维基答案,欢迎他们参加 . )
截至2017年5月3日,C#语言团队在其github repo上创建了C#版本和功能的历史记录:Features Added in C# Language Versions . 还有a page that tracks upcoming and recently implemented language features .
这与大多数答案相同,但是为了方便而制表,并且它具有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无关,每个版本之间没有相关性 . 有关更多信息,请参阅“.NET Framework versions and dependencies” .
比较MSDN文章"What's New in the C# 2.0 Language and Compiler"和“What's New in Visual C# 2005 ", it is possible to deduce that " C#major_version.minor_version”是根据编译器的版本编号创建的 .
有C# 1.2 corresponding to .NET 1.1 and VS 2003,也被命名为Visual C# .NET 2003 .
但进一步微软停止增加次要版本(点后)数字或让它们不为零, 0 . 虽然应该注意,对应于.NET 3.5的C#在msdn.microsoft.com中命名为"Visual C# 2008 Service Pack 1" .
0
有两个并行的命名:主要的.NET /编译器版本编号和Visual Studio编号 .
C# 2.0是Visual C# 2005的同义词
C#3.0对应(或更准确地说,可以定位):
.NET 2.0 <==> Visual C# 2005
.NET3.0 <==> Visual C#2008
.NET 3.5 <==> Visual C# 2008 Service Pack 1
我已经总结了这个表中的大多数版本 . 唯一缺少的应该是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 Core的发布日期的更多信息:When is ASP.NET Core 1.0 (ASP.NET 5 / vNext) scheduled for release?
使用Visual Studio.NET
使用Visual Studio 2005
使用Visual Studio 2008
使用Visual Studio 2010
C# 4.0
C# 5.0 使用Visual Studio 2012
使用Visual Studio 2015
使用Visual Studio 2017
处理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# Version History:
C#是Microsoft开发的一种简单而强大的面向对象编程语言 .
自2002年首次发布以来,C#已经发展很多 . 随着.NET Framework 1.0引入了C# .
下表列出了每个C#版本中引入的重要功能 .
最新版本的C#可在C# Versions中找到 .
你可以查看最新的C#版本here
VERSION _____ 语言规格 ______ MICROSOFT编译器
_____
______
C#1.0 / 1.2 ____ 2001年12月?/ 2003? ___________ 2002年1月?
____
___________
C#2.0 _______ September 2005 ________________ 2005年11月?
_______
________________
C#3.0 _______ May 2006 _____________________ 2006年11月?
_____________________
C#4.0 _______ March 2009 (draft) ______________ 2010年4月?
______________
C#5.0;于2012年8月与.NET 4.5一起发布
C#6.0;随.NET 4.6 2015发布
C#7.0;随.NET 4.7 2017发布
9 回答
C#语言版本历史:
这些是在撰写本文时已知的versions of C#:
C# 1.0 与.NET 1.0和VS2002一起发布(2002年1月)
C# 1.2 (奇怪的是);与.NET 1.1和VS2003一起发布(2003年4月) . 在
IEnumerator
上调用Dispose
的第一个版本实现了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月) . Major features:异步编程,来电者信息属性 . 突破变化:loop variable closure .
C# 6.0 与.NET 4.6和VS2015一起发布(2015年7月) . 由Roslyn实施 . Features:自动实现属性的初始值设定项,使用指令导入集合初始值设定项中的静态成员,异常过滤器,元素初始值设定项,
catch
和finally
,扩展Add
方法 .____9 C# 7.0 与.NET 4.7和VS2017一起发布(2017年3月)主要new features:tuples,ref locals and ref return,pattern matching(包括基于模式的switch语句),inline out parameter declarations,local functions,binary literals, digit separators和arbitrary async returns .
209 C# 7.1 与VS2017 v15.3一起发布(2017年8月)新功能:async main,tuple member name inference,default expression,pattern matching with generics .
209 C# 7.2 随VS2017 v15.5发布(2017年11月)新功能:private protected access modifier,Span<T>, aka interior pointer, aka stackonly struct,everything else .
209 C# 7.3 随VS2017 v15.7(2018年5月)发布 . 新功能:enum, delegate and unmanaged generic type constraints .
ref
重新分配 . 不安全的改进:stackalloc
初始化,取消固定索引fixed
缓冲区,自定义fixed
语句 . 改进了重载分辨率 . 初始化器和查询中的表达式变量 .==
和!=
为元组定义 . 现在,属性可以定位自动属性的支持字段 .C# 8.0 目前处于预览状态 . Expected new features:Non-nullable reference-types,
IAsyncEnumerable<T>
support,Ranges和默认接口方法 .回应OP的问题:
没有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(例如,this MSDN page用于指代它),但Environment.Version属性仍然报告4.0.xxx .
有关语言,运行时和框架版本之间关系的更多详细信息,请访问C# in Depth网站 . 这包括有关在面向.NET 2.0时可以使用哪些C#3.0功能的信息 . (如果有人想将所有内容都纳入此维基答案,欢迎他们参加 . )
截至2017年5月3日,C#语言团队在其github repo上创建了C#版本和功能的历史记录:Features Added in C# Language Versions . 还有a page that tracks upcoming and recently implemented language features .
这与大多数答案相同,但是为了方便而制表,并且它具有Visual Studio和.NET版本以实现完整性 .
注意:.NET开发现在几乎与VS无关,每个版本之间没有相关性 . 有关更多信息,请参阅“.NET Framework versions and dependencies” .
比较MSDN文章"What's New in the C# 2.0 Language and Compiler"和“What's New in Visual C# 2005 ", it is possible to deduce that " C#major_version.minor_version”是根据编译器的版本编号创建的 .
有C# 1.2 corresponding to .NET 1.1 and 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对应(或更准确地说,可以定位):
.NET 2.0 <==> Visual C# 2005
.NET3.0 <==> Visual C#2008
.NET 3.5 <==> Visual C# 2008 Service Pack 1
我已经总结了这个表中的大多数版本 . 唯一缺少的应该是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 Core的发布日期的更多信息:When is ASP.NET Core 1.0 (ASP.NET 5 / vNext) scheduled for release?
使用Visual Studio.NET
使用Visual Studio 2005
使用Visual Studio 2008
使用Visual Studio 2010
C# 4.0
C# 5.0 使用Visual Studio 2012
使用Visual Studio 2015
使用Visual Studio 2017
处理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# Version History:
C#是Microsoft开发的一种简单而强大的面向对象编程语言 .
自2002年首次发布以来,C#已经发展很多 . 随着.NET Framework 1.0引入了C# .
下表列出了每个C#版本中引入的重要功能 .
最新版本的C#可在C# Versions中找到 .
你可以查看最新的C#版本here
VERSION
_____
语言规格______
MICROSOFT编译器C#1.0 / 1.2
____
2001年12月?/ 2003?___________
2002年1月?C#2.0
_______
September 2005________________
2005年11月?C#3.0
_______
May 2006_____________________
2006年11月?C#4.0
_______
March 2009 (draft)______________
2010年4月?C#5.0;于2012年8月与.NET 4.5一起发布
C#6.0;随.NET 4.6 2015发布
C#7.0;随.NET 4.7 2017发布