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

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

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

403281 次浏览

C#语言版本历史:

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

  • 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)和查询表达式
  • C#4.0随. NET 4和VS2010一起发布(2010年4月)。主要新功能:后期绑定(dynamic)、委托和接口泛型差异、更多COM支持、命名参数、元组数据类型和可选参数
  • c#5.0随. NET 4.5和VS2012(2012年8月)一起发布。主要特点:异步编程和调用者信息属性。重大更改:循环变量闭包
  • c功能.0随. NET 4.6和VS2015(2015年7月)一起发布。由罗斯林实现。功能:自动实现属性的初始化器,使用指令导入静态成员、异常过滤器、元素初始化器、catchfinally中的await、集合初始化器中的扩展Add方法。
  • C局部功能.0随. NET 4.7和VS2017(2017年3月)一起发布。主要新功能元组ref本地人和ref返回模式匹配(包括基于模式的开关语句)、inline#0参数声明局部功能二进制文字,数字分隔符任意异步返回
  • C#7.1随VS2017 v15.3(2017年8月)一起发布。新功能:异步主元组成员名称推断默认表达式泛型模式匹配
  • C#7.2随VS2017 v15.5(2017年11月)一起发布。新功能:私有保护访问修饰符Span,也称为内部指针,也称为堆栈结构其他一切
  • C#7.3与VS2017 v15.7(2018年5月)一起发布。新功能:枚举、委托和#0泛型类型约束ref重新分配。不安全的改进:stackalloc初始化、取消固定索引的fixed缓冲区、自定义fixed语句。改进的重载解决方案。初始化器和查询中的表达式变量。为元组定义==!=。自动属性的支持字段现在可以通过属性进行定位。
  • c静态局部函数.0随. NET Core 3.0和VS2019 v16.3(2019年9月)一起发布。主要新功能可为空引用类型异步流指数和范围只读成员使用声明默认接口方法静态局部函数内插逐字字符串的增强
  • c新功能.0. NET 5.0和VS2019 v16.8一起发布(2020年11月)。主要新功能??0、??1、??2、数据类、位置记录、??3、??4(简单类型模式、关系模式、逻辑模式)、改进的目标类型(目标类型new表达式、目标类型???)和协变返回。次要功能:放松refpartial修饰符的排序、参数空值检查、lambda丢弃参数、本机ints、局部函数上的属性、函数指针、静态lambda、扩展GetEnumerator、模块初始化器和扩展部分。
  • C#10.0随. NET 6.0(2021年11月)一起发布。主要新功能:记录结构、结构无参数构造函数、插值字符串处理程序、全局using指令、文件范围的命名空间声明、扩展属性模式、const插值字符串、解构中的混合赋值和声明、单个方法的异步方法构建器(通过属性)、参数的CallerArgumentExpression属性、增强的#line规则。
  • c#11.0将与. NET 7.0一起发布(宣布日期,已经可测试)。主要新功能:文件范围的类型、通用数学支持、自动默认结构、常量字符串上的模式匹配Span<char>、扩展范围名称、数字IntPtr、UTF-8字符串文字、所需成员、ref字段和scoped ref、原始字符串文字、改进的方法组转换为委托、警告波7、通用属性、字符串插值表达式中的换行符、列表模式

针对OP的问题:

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

没有C#3.5这样的东西——这里混淆的原因是C#3.0出现在. NET 3.5中。然而,语言和框架是独立版本的——CLR也是如此,它的版本为. NET 2.0到3.5的2.0,. NET 4引入了CLR 4.0,尽管有服务包。. NET 4.5中的CLR有各种改进,但版本控制不清楚:在某些地方,它可能被称为CLR 4.5(例如,此MSDN页面曾经这样称呼它),但#0属性仍然报告4.0.xxx.

截至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语法和功能。

版本语言规范microsoft编译器
C#1.0/1.22001年12月?/2003?2002年1月?
C#2.02005年9月2005年11月?
c#3.02006年5月2006年11月?
C#4.02009年3月(草案)2010年4月?
c#5.02012年8月与. NET 4.5一起发布
c#6.0发布于. NET 4.6 2015
C#7.0发布于. NET 4.7 2017
c#8.0发布于. NET 4.8 2019

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

CVisual C#. NET 2003.2对应于. NET 1.1和VS 2003,也称为Visual C#. NET 2003

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

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

C#2.0Visual C#2005的同义词

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

这与这里的大多数答案相同,但为了方便而列表化,并且为了完整性而有Visual Studio. NET版本。

c#版本VS版本. NET版本clr版本发布日期
1.020021.01.02002年2
1.220031.11.12003年4
2.020052.02.02005年11
3.02.02006年11
3.020083.52.02007年11月
4.020104.042010年4月
5.020124.542012年8
4.5.142013年10
4.5.242014年5
6.020154.642015年7
4.6.142015年11
4.6.242016年8
7.020172017年3月
4.742017年5
7.12017(v15.3)2017年8
4.7.142017年10
7.22017(v15.5)2017年12
8.020194.842019年4
4.8.142022年8

自. NET Core以来的版本

c#版本VS版本. NET版本发布日期支持结束
2015年更新3. NET Core 1.02016年6月2019年6月
. NET Core 1.12016年112019年6月
7.020172017年3月
7.12017(v15.3). NET Core 2.02017年8Oct2018
7.32017(v15.7). NET Core 2.12018年52021年8
. NET Core 2.22018年122019年12
8.02019
9.02019(v16.8). NET 52020年112022年5
10.02022年. NET 62021年11月2024年11
11.02022年(17.4). NET 72022年11月2024年5月
. NET 82023年112026年11

*-. 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发布节奏”了解更多信息。

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

请注意,ASP.NET5已更名为ASP.NETCore 1.0,ASP.NETMVC 6已更名为ASP.NETCore MVC 1.0.0。

我已经在表中包含了ASP.NET5 RC1的发布日期,但是我还没有包括ASP.NET核心1.0和其他核心版本,因为我找不到确切的发布日期。你可以在这里阅读更多关于ASP.NET核心的发布日期:ASP.NETCore 1.0(ASP.NET5/vNext)计划何时发布?

版本

C#1.0-Visual Studio. NET 2002

  • 结构
  • 接口
  • 活动
  • 属性
  • 代表
  • 表达式
  • 发言
  • 属性
  • 字面意思

C#1.2-Visual Studio. NET 2003

  • 把它处理掉
  • Foreach在字符串特化
  • C#2-Visual Studio 2005
  • 泛型
  • 部分类型
  • 匿名方法
  • 迭代器
  • 可为空的类型
  • Getter/setter单独可访问性
  • 方法组转换(委托)
  • 静态类
  • 委托推理

C#3-Visual Studio 2008

  • 隐式类型局部变量
  • 对象和集合初始化器
  • 自动实现的属性
  • 匿名类型
  • 扩展方法
  • 查询表达式
  • lambda表达式
  • 表达式树
  • 部分方法

C#4-Visual Studio 2010

  • 动态绑定
  • 命名和可选参数
  • 泛型委托和接口的协和魂斗罗方差
  • 嵌入式互操作类型(“NoPIA”)

C#5-Visual Studio 2012

  • 异步方法
  • 来电者信息属性

C#6-Visual Studio 2015

  • 规范草案在线
  • 编译器即服务(Roslyn)
  • 将静态类型成员导入命名空间
  • 异常过滤器
  • 等待捕获/最终块
  • 自动属性构造器
  • 仅getter属性的默认值
  • 表达体成员
  • 空传播子(空条件运算符,简洁的空检查)
  • 串插值
  • 运算符名称
  • 字典构造器

C#7.0-Visual Studio 2017

  • out变量
  • 模式匹配
  • 元组
  • 解构
  • 丢弃
  • 本地功能
  • 二进制文字
  • 数字分离器
  • Ref返回和当地人
  • 广义异步返回类型
  • 更多表情丰富的成员
  • 抛出表达式

C#7.1-Visual Studio 2017版本15.3

  • 异步主
  • 默认表达式
  • 参考组件
  • 推断元组元素名称
  • 泛型模式匹配

C#7.2-Visual Studio 2017版本15.5

  • Span和ref类类型
  • 在参数和只读引用中
  • 参考条件
  • 非尾随命名参数
  • 私有受保护的可访问性
  • 基本说明符后的数字分隔符

C#7.3-Visual Studio 2017版本15.7

  • System. Enum、System.委托和非托管约束。
  • Ref本地重新赋值:现在可以使用ref赋值操作符(=ref)重新赋值Ref locals和ref参数。
  • Stackalloc初始化器:现在可以初始化堆栈分配的数组,例如Span x=stackalloc[]{1,2,3};。
  • 索引可移动的固定缓冲区:可以索引固定缓冲区而无需首先固定。
  • 自定义固定语句:实现合适的GetPinnableReference的类型可以在固定语句中使用。
  • 改进的重载候选:可以提前排除一些重载解决候选,从而减少歧义。
  • 初始化器和查询中的表达式变量:字段初始化器、构造函数初始化器和LINQ查询中允许使用out var和模式变量等表达式变量。
  • 元组比较:元组现在可以与==和!=进行比较。
  • 支持字段上的属性:允许自动实现的属性上的[field:…]属性以其支持字段为目标。

C#8.0-. NET Core 3.0和Visual Studio 2019版本16.3

  • 可为空的引用类型:在API中使用?、Notnull约束和注释属性表达引用类型的可为空意图,编译器将使用这些来尝试检测可能的空值被取消引用或传递给不合适的API。
  • 默认接口成员:接口现在可以拥有具有默认实现的成员,以及除状态(即无字段)之外的静态/私有/受保护/内部成员。
  • 递归模式:位置和属性模式允许更深入地测试对象,而开关表达式允许测试多个模式并以紧凑的方式生成相应的结果。
  • 异步流:WAITForeach和wait使用允许异步枚举和处理IAsyncENumable集合和IAsyncDisposable资源,而异步迭代器方法允许方便地实现此类异步流。
  • 增强使用:使用声明添加了一个隐式范围,并且使用语句和声明允许使用模式处理ref结构。
  • 范围和索引:i… j语法允许构建System. Range实例,^k语法允许构建System. Index实例,这些实例可用于索引/切片集合。
  • null合并赋值:??=允许在值为null时有条件地赋值。
  • 静态局部函数:用静态修改的局部函数不能捕获这个或局部变量,局部函数参数现在在父作用域中隐藏局部变量。
  • 非托管泛型结构:仅具有非托管字段的泛型结构类型现在被视为非托管(即它们满足非托管约束)。
  • 只读成员:现在可以将单个成员标记为只读,以指示和强制它们不修改实例状态。
  • 嵌套上下文中的stackalloc:现在允许在更多表达式上下文中使用stackalloc表达式。
  • 替代内插逐字字符串:@$"…"字符串被识别为内插逐字字符串,就像$@"…"一样。
  • 属性访问器过时:属性访问器现在可以单独标记为过时。
  • 许可t在无约束类型参数上为空

【来源】:https://github.com/dotnet/csharplang/blob/master/Language-Version-History.md

C#8.0是C#的最新版本。它仅在. NET Core 3. x和更新版本上受支持。许多最新功能需要. NET Core 3. x中引入的库和运行时功能。

下表列出了带有版本的目标框架及其默认C#版本。

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(属性)
  • 方法组转换(委托)
  • 协方差与魂斗罗-Variance
  • 静态类

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

  • 表达式体方法
  • 自属性构造器
  • 表达式名称
  • 主构造函数
  • 等待在catch块
  • 异常过滤
  • 字符串插值

C#7.0. NET Core 2.0 Visual Studio 2017

  • out变量
  • 元组
  • 丢弃
  • 模式匹配
  • 地方职能
  • 广义异步返回类型
  • 数字文字语法改进

C#8.0. NET Core 3.0 Visual Studio 2019

  • 只读成员
  • 默认接口方法
  • 模式匹配增强:
    • 切换表达式
    • 属性模式
    • 元组模式
    • 位置模式
  • 使用声明
  • 静态局部函数
  • 一次性引用结构
  • 可为空的引用类型
  • 异步流处理
  • 异步一次性
  • 指数和范围
  • 零合并赋值
  • 非托管构造类型
  • 嵌套表达式中的Stackalloc
  • 增强内插逐字字符串

我一直在寻找. NET、C#、CLR和Visual Studio版本的简明历史以及关键语言功能。

由于我在一个地方找不到任何包含我需要的所有信息的最新表格,我将Microsoft文档中的详细信息合并到我试图保持一个包含我正在寻找的内容的简洁表格中。

它在这里可用:https://mantinband.github.io/dotnet-shmotnet/

我可能有一些错误或丢失的信息,所以请随时在这里打开一个问题或贡献:https://github.com/mantinband/dotnet-shmotnet

偷窥:

在此输入图片描述

预览:C#11.0。NET Core 7.0 Visual Studio 2022 Update 1

READ MORE

  • 允许在插入字符串的“孔”中换行符
  • 列出模式
  • 参数空值检测
  • 与可空引用类型的交互
  • 通用属性
  • 字段关键字
  • 接口中的静态抽象
  • 在或模式下的声明
  • 记录和初始化
  • 歧视工会
  • 参数跨度T
  • 语句作为表达式
  • 表达式树
  • 类型系统扩展