C#1.0~10.0特性总结
前言:C#的发展已经有十多年的时间了,目前已经更新到8.0版本,本文参考官网及其他博主文章梳理了各个版本包括的常用特性,后续会不断更新完善,如有错误,欢迎斧正
C#版本、.NET、VS版本对应关系 |
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#各版本新增的主要特性
C#1.0 |
- 类
- 结构
- 接口
- 事件
- 属性
- 委托
- 运算符和表达式
- 语句
- 特性
C#2.0 |
- 泛型
- 分部类型
- 匿名方法
- 可以为null的值类型
- 迭代器
- 斜变和逆变
- getter/setter 单独可访问性
- 方法组转换
- 静态类
- 委托推断
C#3.0 |
- 自动实现的属性
- 匿名类型
- 查询表达式
- Lambda 表达式
- 表达式树
- 扩展方法
- 隐式类型本地变量
- 分部方法
- 对象和集合初始值设定项
C#4.0 |
- 动态绑定
- 命名参数/可选参数
- 泛型协变和逆变
- 嵌入的互操作类型
C#5.0 |
- 异步成员
- 调用方信息特性
C#6.0 |
- 静态导入
- 异常筛选器
- 自动属性初始化表达式
- Expression bodied 成员
- Null 传播器
- 字符串内插
- nameof 运算符
- 索引初始化表达式
- Catch/Finally 块中的 Await
- 仅限 getter 属性的默认值
C#7.0 |
- Out 变量
- 元组和析构函数
- 模式匹配
- 本地函数
- 已扩展 expression bodied 成员
- Ref 局部变量和返回结果
- 弃元
- 二进制文本和数字分隔符
- 引发表达式
C#7.1 |
async
Main
方法default
文本表达式- 推断元组元素名称
- 泛型类型参数的模式匹配
C#7.2 |
- 编写安全高效代码的技巧
- 非尾随命名参数
- 数值文字中的前导下划线
private protected
访问修饰符- 条件
ref
表达式
C#7.3 |
- 无需固定即可访问固定的字段。
- 可以重新分配
ref
本地变量。 - 可以使用
stackalloc
数组上的初始值设定项。 - 可以对支持模式的任何类型使用
fixed
语句。 - 可以使用更多泛型约束。
C#8.0 |
- Readonly 成员
- 默认接口方法
- 模式匹配增强功能:
- Switch 表达式
- 属性模式
- 元组模式
- 位置模式
- Using 声明
- 静态本地函数
- 可处置的 ref 结构
- 可为空引用类型
- 异步流
- 索引和范围
- Null 合并赋值
- 非托管构造类型
- 嵌套表达式中的 Stackalloc
- 内插逐字字符串的增强功能
C#9.0 |
- 记录
- 仅限 Init 的资源库
- 顶级语句
- 模式匹配增强功能
- 性能和互操作性
- 本机大小的整数
- 函数指针
- 禁止发出 localsinit 标志
- 调整和完成功能
- 目标类型的
new
表达式 static
匿名函数- 目标类型的条件表达式
- 协变返回类型
- 扩展
GetEnumerator
支持foreach
循环 - Lambda 弃元参数
- 本地函数的属性
- 目标类型的
- 支持代码生成器
- 模块初始值设定项
- 分部方法的新功能
C#10.0 |
global using
指令- 文件范围的命名空间声明
- 扩展属性模式
- 可使用
const
内插字符串 - 记录类型可密封
ToString()
- 在同一析构中可同时进行赋值和声明
- 可在方法上使用
AsyncMethodBuilder
属性
不积跬步,无以至千里;不积小流,无以成江海。ヾ(◍°∇°◍)ノ゙