C#的正确版本号是什么?什么时候出来的?为什么我找不到有关C#3.5的任何答案?
这个问题主要是为了帮助那些使用错误版本号(例如C#3.5)搜索答案的人。希望任何没有找到错误版本号答案的人都能找到这个问题,然后用正确的版本号再次搜索。
C#的正确版本号是什么?什么时候出来的?为什么我找不到有关C#3.5的任何答案?
这个问题主要是为了帮助那些使用错误版本号(例如C#3.5)搜索答案的人。希望任何没有找到错误版本号答案的人都能找到这个问题,然后用正确的版本号再次搜索。
当前回答
Version .NET Framework Visual Studio Important Features
C#1.0.NET Framework 1.0/1.1 Visual Studio.NET 2002
基本功能
C#2.0.NET Framework 2.0 Visual Studio 2005
泛型分部工程类型匿名方法遍历器可为空的类型私有setter(财产)方法组转换(委托)协方差和反方差静态类
C#3.0.NET Framework 3.0\3.5 Visual Studio 2008
隐式类型的局部变量对象和集合初始化器自动实现的财产匿名类型扩展方法查询表达式Lambda表达式表达式树分部方法
C#4.0.NET Framework 4.0 Visual Studio 2010
动态绑定(后期绑定)命名参数和可选参数通用协变量和反变量嵌入式互操作类型
C#5.0.NET Framework 4.5 Visual Studio 2012/2013
异步功能呼叫者信息
C#6.0.NET Framework 4.6 Visual Studio 2013/2015
表达式实体方法自动属性初始值设定项表达式名称主构造函数在挡块中等待异常筛选器字符串插值
C#7.0.NET Core 2.0 Visual Studio 2017
输出变量多元组丢弃图案匹配本地功能通用异步返回类型数字文字语法改进
C#8.0.NET Core 3.0 Visual Studio 2019
只读成员默认接口方法图案匹配增强功能:切换表达式属性模式褶皱图案位置模式使用声明静态局部函数一次性引用结构可为空的引用类型异步流异步一次性指数和范围空合并赋值未管理的构造类型嵌套表达式中的Stacklalloc增强内插逐字字符串
其他回答
我在寻找.NET、C#、CLR和Visual Studio版本以及关键语言功能的简明历史。
由于我在一个地方找不到任何包含我所需所有信息的最新表格,我将Microsoft文档中的详细信息合并到了一个简洁的表格中。
这里提供:https://mantinband.github.io/dotnet-shmotnet/
我可能有一些错误或缺少信息,因此请随时打开问题或在此处投稿:https://github.com/mantinband/dotnet-shmotnet
偷偷偷看:
这与这里的大多数答案相同,但为了方便起见,将其制成表格,并且它有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 |
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 | ||
8.0 | 2019 | 4.8 | 4 | Apr 2019 |
4.8.1 | 4 | Aug 2022 |
.NET Core之后的版本
C# version | VS version | .NET version | Release date | End of Support |
---|---|---|---|---|
2015 Update 3 | .NET Core 1.0 | Jun 2016 | Jun 2019 | |
.NET Core 1.1 | Nov 2016 | Jun 2019 | ||
7.0 | 2017 | Mar 2017 | ||
7.1 | 2017 (v15.3) | .NET Core 2.0 | Aug 2017 | Oct 2018 |
7.3 | 2017 (v15.7) | .NET Core 2.1 | May 2018 | Aug 2021 |
.NET Core 2.2 | Dec 2018 | Dec 2019 | ||
8.0 | 2019 | Apr 2019 | ||
2019 (v16.3) | .NET Core 3.0 | Sep 2019 | Mar 2020 | |
2019 (v16.4) | .NET Core 3.1 | Dec 2019 | Dec 2022 | |
9.0 | 2019 (v16.8) | .NET 5 | Nov 2020 | May 2022 |
10.0 | 2022 | .NET 6 | Nov 2021 | Nov 2024 |
11.0 | 2022 (17.4) | .NET 7 | Nov 2022 | May 2024 |
.NET 8 | Nov 2023 | Nov 2026 |
*-.NET 5.0不是.NET framework的更新版本,而是.NET Core 3。从.NET 5.0开始,没有更新版本的.NET完整框架。
**-.NET Core没有单独的CLR(CoreCLR)版本。无论.NET Core版本是什么,都是CoreCLR版本。所以不提它。
注意:.NET在很大程度上独立于VS和编译器版本,每个版本之间没有相关性。以上列表并不意味着某些版本的.NET与某些C#或VS版本绑定。这只是按照发布的时间顺序(VS/C#和.NET)编译的。有些发布恰好在一起,因此它们位于同一行。有关详细信息,请参阅“.NET Framework版本和依赖项”和“.NET发布节奏”。
C#语言版本历史记录:
以下是编写本文时已知的C#版本:
C#1.0与.NET 1.0和VS2002一起发布(2002年1月)C#1.2(足够奇怪);与.NET 1.1和VS2003一起发布(2003年4月)。对实现IDisposable的IEnumerators调用Dispose的第一个版本。其他一些小功能。与.NET 2.0和VS2005一起发布的C#2.0(2005年11月)。主要新特性:泛型、匿名方法、可空类型和迭代器块C#3.0与.NET 3.5和VS2008一起发布(2007年11月)。主要新特性:lambda表达式、扩展方法、表达式树、匿名类型、隐式类型(var)和查询表达式与.NET 4和VS2010一起发布的C#4.0(2010年4月)。主要的新特性:后期绑定(动态)、委托和接口泛型差异、更多COM支持、命名参数、元组数据类型和可选参数C#5.0与.NET 4.5和VS2012一起发布(2012年8月)。主要功能:异步编程和调用者信息属性。中断更改:循环变量关闭。C#6.0与.NET 4.6和VS2015一起发布(2015年7月)。由Roslyn实施。功能:自动实现的财产的初始值设定项,使用指令导入静态成员、异常过滤器、元素初始值设定值设定项、捕获中等待以及集合初始值设定中的扩展Add方法。C#7.0与.NET 4.7和VS2017一起发布(2017年3月)。主要新功能:元组、ref局部变量和ref返回、模式匹配(包括基于模式的开关语句)、内联参数声明、本地函数、二进制文本、数字分隔符和任意异步返回。C#7.1与VS2017 v15.3一起发布(2017年8月)。新特性:异步主、元组成员名称推断、默认表达式以及与泛型的模式匹配。C#7.2随VS2017 v15.5发布(2017年11月)。新功能:私有保护访问修饰符、Span<T>、又名内部指针、又名堆栈结构以及其他所有功能。C#7.3随VS2017 v15.7发布(2018年5月)。新功能:枚举、委托和非托管泛型类型约束。ref重新分配。不安全的改进:堆栈锁定初始化、未固定的索引固定缓冲区、自定义固定语句。提高过载分辨率。初始化器和查询中的表达式变量。==和!=为元组定义。汽车制造商的支持字段现在可以通过属性作为目标。C#8.0与.NET Core 3.0和VS2019 v16.3一起发布(2019年9月)。主要的新特性:可为空的引用类型、异步流、索引和范围、只读成员、使用声明、默认接口方法、静态本地函数以及内插逐字字符串的增强。C#9.0与.NET 5.0和VS2019 v16.8一起发布(2020年11月)。主要新功能:初始财产、记录、with-expressions、数据类、位置记录、顶级程序、改进的模式匹配(简单类型模式、关系模式、逻辑模式)、改进的目标类型(目标类型新表达式、目标类型?和?)以及协变返回。次要功能:放松ref和partial修饰符的排序、参数null检查、lambda丢弃参数、本机int、本地函数的属性、函数指针、静态lambda、扩展GetEnumerator、模块初始化器和扩展partial。C#10.0与.NET 6.0一起发布(2021 11月)。主要新功能:记录结构、结构无参数构造函数、插值字符串处理程序、全局使用指令、文件范围的命名空间声明、扩展属性模式、常量插值字符串、解构中的混合赋值和声明、单个方法的异步方法生成器(通过属性)、参数的CallerArgumentExpression属性、,增强的#line pragmas。C#11.0随.NET 7.0发布(2022年11月)。主要新功能:文件范围类型、通用数学支持、自动默认结构、模式匹配常量字符串上的Span<char>、扩展范围名称、数字IntPtr、UTF-8字符串文本、必需成员、ref字段和范围ref、原始字符串文本、改进的方法组转换为委托、警告波形7、通用属性、字符串插值表达式中的换行符、列表模式
针对OP的问题:
C#的正确版本号是什么?什么时候出来的?为什么我找不到有关C#3.5的任何答案?
没有C#3.5这样的东西——这里的混淆是因为.NET 3.5中存在C#3.0。然而,语言和框架的版本是独立的,正如CLR一样,它的版本为2.0,适用于.NET 2.0到3.5,.NET 4引入了CLR 4.0,尽管有服务包。.NET4.5中的CLR有各种改进,但版本控制尚不清楚:在某些地方,它可能被称为CLR 4.5(例如,此MSDN页面曾以这种方式引用它),但Environment.Version属性仍然报告4.0.xxx。
截至2017年5月3日,C#语言团队在其GitHub存储库中创建了C#版本和功能的历史记录:C#语言版本中添加的功能。还有一个跟踪即将推出和最近实现的语言功能的页面。
Version .NET Framework Visual Studio Important Features
C#1.0.NET Framework 1.0/1.1 Visual Studio.NET 2002
基本功能
C#2.0.NET Framework 2.0 Visual Studio 2005
泛型分部工程类型匿名方法遍历器可为空的类型私有setter(财产)方法组转换(委托)协方差和反方差静态类
C#3.0.NET Framework 3.0\3.5 Visual Studio 2008
隐式类型的局部变量对象和集合初始化器自动实现的财产匿名类型扩展方法查询表达式Lambda表达式表达式树分部方法
C#4.0.NET Framework 4.0 Visual Studio 2010
动态绑定(后期绑定)命名参数和可选参数通用协变量和反变量嵌入式互操作类型
C#5.0.NET Framework 4.5 Visual Studio 2012/2013
异步功能呼叫者信息
C#6.0.NET Framework 4.6 Visual Studio 2013/2015
表达式实体方法自动属性初始值设定项表达式名称主构造函数在挡块中等待异常筛选器字符串插值
C#7.0.NET Core 2.0 Visual Studio 2017
输出变量多元组丢弃图案匹配本地功能通用异步返回类型数字文字语法改进
C#8.0.NET Core 3.0 Visual Studio 2019
只读成员默认接口方法图案匹配增强功能:切换表达式属性模式褶皱图案位置模式使用声明静态局部函数一次性引用结构可为空的引用类型异步流异步一次性指数和范围空合并赋值未管理的构造类型嵌套表达式中的Stacklalloc增强内插逐字字符串
处理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语法和特性。