前言:C#的发展已经有十多年的时间了,目前已经更新到8.0版本,本文参考官网及其他博主文章梳理了各个版本包括的常用特性,后续会不断更新完善,如有错误,欢迎斧正
C#版本 |
发布时间 |
.NET版本 |
VS版本 |
CLR版本 |
1.0 |
2002-02-13 |
.NET Framework 1.0 |
VS.NET 2002 |
1.0 |
1.1、1.2 |
2003-04-24
|
.NET Framework 1.1 |
VS.NET 2003 |
1.1 |
2.0 |
2005-11-07 |
.NET Framework 2.0 |
VS2005 |
2.0 |
3.0 |
2006-11 |
.NET Framework 3.0 |
VS2008 |
2.0 |
3.0 |
2007-11-19 |
.NET Framework 3.5 |
VS2008 |
2.0 |
4.0 |
2010-4-12 |
.NET Framework 4.0 |
VS2010 |
4 |
5.0 |
2012-02-20 |
.NET Framework 4.5 |
VS2012 |
4 |
5.0 |
2013-10-17 |
.NET Framework 4.5.1 |
VS2013 |
4 |
5.0 |
2014-05-05 |
.NET Framework 4.5.2 |
VS2013 |
4 |
6.0 |
2015-07-26 |
.NET Framework 4.6 |
VS2015(v14) |
4 |
6.0 |
2015-11-30 |
.NET Framework 4.6.1 |
VS2015(v14) |
4 |
7.0 |
2016-08-02 |
.NET Framework 4.6.2 |
VS2017(v15) |
4 |
7.1 |
2017-04-05 |
.NET Framework 4.7 |
VS2017(v15.3) |
4 |
7.2 |
2017-10-17 |
.NET Framework 4.7.1 |
VS2017(v15.5) |
4 |
7.3 |
2018-04-30 |
.NET Framework 4.7.2 |
VS2017(v15.7) |
4 |
8.0 |
2019-04-18 |
.NET Framework 4.8 |
VS2019(v16) |
4 |
9.0 |
未发布 |
.NET 5 |
|
|
10.0 |
未发布 |
.NET 6 |
|
|
注:官网C#发展历史:https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-version-history
以下是C#各版本新增的主要特性
-
类
- 结构
- 接口
- 事件
- 属性
- 委托
- 运算符和表达式
- 语句
- 特性
- 泛型
- 分部类型
- 匿名方法
- 可以为null的值类型
- 迭代器
- 斜变和逆变
- getter/setter 单独可访问性
- 方法组转换
- 静态类
- 委托推断
- 自动实现的属性
- 匿名类型
- 查询表达式
- Lambda 表达式
- 表达式树
- 扩展方法
- 隐式类型本地变量
- 分部方法
- 对象和集合初始值设定项
- 动态绑定
- 命名参数/可选参数
- 泛型协变和逆变
- 嵌入的互操作类型
- 静态导入
- 异常筛选器
- 自动属性初始化表达式
- Expression bodied 成员
- Null 传播器
- 字符串内插
- nameof 运算符
- 索引初始化表达式
- Catch/Finally 块中的 Await
- 仅限 getter 属性的默认值
- Out 变量
- 元组和析构函数
- 模式匹配
- 本地函数
- 已扩展 expression bodied 成员
- Ref 局部变量和返回结果
- 弃元
- 二进制文本和数字分隔符
- 引发表达式
async
Main
方法
default
文本表达式
- 推断元组元素名称
- 泛型类型参数的模式匹配
- 编写安全高效代码的技巧
- 非尾随命名参数
- 数值文字中的前导下划线
private protected
访问修饰符
- 条件
ref
表达式
- 无需固定即可访问固定的字段。
- 可以重新分配
ref
本地变量。
- 可以使用
stackalloc
数组上的初始值设定项。
- 可以对支持模式的任何类型使用
fixed
语句。
- 可以使用更多泛型约束。
- Readonly 成员
- 默认接口方法
-
模式匹配增强功能:
- Switch 表达式
- 属性模式
- 元组模式
- 位置模式
- Using 声明
- 静态本地函数
- 可处置的 ref 结构
- 可为空引用类型
- 异步流
- 索引和范围
- Null 合并赋值
- 非托管构造类型
- 嵌套表达式中的 Stackalloc
- 内插逐字字符串的增强功能
- 记录
- 仅限 Init 的资源库
- *语句
- 模式匹配增强功能
-
性能和互操作性
- 本机大小的整数
- 函数指针
- 禁止发出 localsinit 标志
-
调整和完成功能
- 目标类型的
new
表达式
-
static
匿名函数
- 目标类型的条件表达式
- 协变返回类型
- 扩展
GetEnumerator
支持 foreach
循环
- Lambda 弃元参数
- 本地函数的属性
-
支持代码生成器
global using
指令
- 文件范围的命名空间声明
- 扩展属性模式
- 可使用
const
内插字符串
- 记录类型可密封
ToString()
- 在同一析构中可同时进行赋值和声明
- 可在方法上使用
AsyncMethodBuilder
属性