C#各版本新增功能整理
2020-08-25 10:28:26 0 举报
AI智能生成
C#各版本新增功能整理
作者其他创作
大纲/内容
C#语言版本控制
目标框架 Version C#语言版本的默认值<br>.NET Core 3.x C# 8.0<br>.NET Core 2.x C# 7.3<br>.NET Standard 2.1 C# 8.0<br>.NET Standard 2.0 C# 7.3<br>.NET Standard 1.x C# 7.3<br>.NET Framework 全部 C# 7.3
C#版本 最低SDK版本 .NET Framework 版本<br>C# 8.0 Microsoft VisualStudio/生成工具 2019,版本16.3 或.NET Core 3.0 SDK .NET Framework 4.8<br>C# 7.3 Microsoft Visual Studio/生成工具 2017,版本 15.7 .NET Framework 4.7.2<br>C# 7.2 Microsoft Visual Studio/生成工具 2017,版本 15.5 .NET Framework 4.7.1<br>C# 7.1 Microsoft Visual Studio/生成工具 2017,版本 15.3 .NET Framework 4.7<br>C# 7.0 Microsoft Visual Studio/生成工具 2017 .NET Framework 4.6.2<br>C# 6 Microsoft Visual Studio/生成工具 2015 .NET Framework 4.6<br>C# 5 Microsoft Visual Studio/生成工具 2012 或捆绑的.NET Framework 4.5编译器 .NET Framework 4.5<br>C# 4 Microsoft Visual Studio/生成工具 2010 或捆绑的.NET Framework 4.0编译器 .NET Framework 4.0<br>C# 3 Microsoft Visual Studio/生成工具 2008 或捆绑的.NET Framework 3.5编译器<br>C# 2 Microsoft Visual Studio/生成工具 2005 或捆绑的.NET Framework 2.0编译器<br>C# 1.0/1.2 Microsoft Visual Studio/生成工具 2002 或捆绑的.NETFramework 1.0编译器<br>
C# 8.0新增功能<br>
Readonly 成员
可将 readonly 修饰符应用于结构的成员。 它指示该成员不会修改状态。 这比将 readonly 修饰符应用于 struct 声明更精细
默认接口方法
可以将成员添加到接口,并为这些成员提供实现
模式匹配增强功能
Switch 表达式
属性模式
元组模式
位置模式
Using 声明
静态本地函数
现在可以向本地函数添加 static 修饰符,以确保本地函数不会从封闭范围捕获(引用)任何变量
可处置的 ref 结构
可为空引用类型
异步流
从 C# 8.0 开始,可以创建并以异步方式使用流
异步可释放
从 C# 8.0 开始,语言支持实现 System.IAsyncDisposable 接口的异步可释放类型
索引和范围
索引和范围为访问序列中的单个元素或范围提供了简洁的语法
Null 合并赋值
C# 8.0 引入了 null 合并赋值运算符 ??=
非托管构造类型
从 C# 8.0 开始,如果构造的值类型仅包含非托管类型的字段,则该类型不受管理。
嵌套表达式中的 Stackalloc
从 C# 8.0 开始,如果 stackalloc 表达式的结果为 System.Span<T> 或 System.ReadOnlySpan<T> 类型,则可以在其他表达式中使用 stackalloc 表达式
内插逐字字符串的增强功能
内插逐字字符串中 $ 和 @ 标记的顺序可以任意安排:$@"..." 和 @$"..." 均为有效的内插逐字字符串。 在早期 C# 版本中,$ 标记必须出现在 @ 标记之前。
C# 7.3新增功能<br>
启用更高效的安全代码
应能够安全地编写性能与不安全代码一样好的 C# 代码
索引 fixed 字段不需要进行固定
可能会重新分配 ref 局部变量
现在在对 ref 局部变量进行初始化后,可能会对其重新分配,以引用不同的实例
stackalloc 数组支持初始值设定项
更多类型支持 fixed 语句
增强的泛型约束
提升了现有功能
元组支持 == 和 !=
C# 元组类型现在支持 == 和 !=
将特性添加到自动实现的属性的支持字段
in 方法重载解析决胜属性
扩展初始值设定项中的表达式变量
改进了重载候选项
新的编译器选项
公共或开放源代码签名
pathmap
C# 7.2新增功能<br>
安全高效的代码的增强功能
非尾随命名参数
数值文字中的前导下划线
C# 7.0 中实现了对数字分隔符的支持,但这不允许文字值的第一个字符是 _。 十六进制文本和二进制文件现可以 _ 开头
private protected 访问修饰符
条件 ref 表达式
C# 7.1新增功能<br>
异步main方法
应用程序的入口点可以含有 async 修饰符。
默认文本表达式
在可以推断目标类型的情况下,可在默认值表达式中使用默认文本表达式。
推断元组元素名称
在许多情况下,可通过元组初始化来推断元组元素的名称。
泛型类型参数的模式匹配<br>
可以对类型为泛型类型参数的变量使用模式匹配表达式。
引用程序集生成
编译器有 -refout 和 -refonly 两个选项,可用于控制引用程序集生成。
替代C#版本的默认值方式
手动编辑项目文件
为子目录中的多个项目设置语言版本
配置-langversion编译器选项
C# 6.0新增功能<br>
只读自动属性
只读自动属性 提供了更简洁的语法来创建不可变类型<br>此功能实现用于创建不可变类型的真正语言支持且使用更简洁和方便的自动属性语法。
自动属性初始化表达式
自动属性初始值设定项 可让你在属性声明中声明自动属性的初始值。
Expression-bodied 函数成员
using static
using static 增强功能可用于导入单个类的静态方法。
Null 条件运算符
Null 条件运算符使 null 检查更轻松、更流畅 。 将成员访问 . 替换为 ?.
字符串内插
新的字符串内插功能可以在字符串中嵌入表达式。 使用 $ 作为字符串的开头,并使用 { 和 } 之间的表达式代替序号
异常筛选器
“异常筛选器”是确定何时应该应用给定的 catch 子句的子句
nameof 表达式
nameof 表达式的计算结果为符号的名称
Catch 和 Finally 块中的 Await
C# 5 对于可放置 await 表达式的位置有若干限制。 使用 C# 6,现在可以在 catch 或 finally 表达式中使用 await
使用索引器初始化关联集合<br>
索引初始值设定项 是提高集合初始值设定项与索引用途一致性的两个功能之一
集合初始值设定项中的扩展 Add 方法
使集合初始化更容易的另一个功能是对 Add 方法使用扩展方法。 添加此功能的目的是进行 Visual Basic 的奇偶校验
改进了重载解析
早期的编译器无法正确区分 Task.Run(Action) 和 Task.Run(Func<Task>())。 在早期版本中,需要使用 lambda 表达式作为参数
确定性的编译器选项
deterministic 选项指示编译器为同一源文件的后续编译生成完全相同的输出程序集
C# 7.0新增功能<br>
out变量<br>
在使用 out 变量的地方声明 out 变量,而不是在上面的另一行。无需分配初始值,通过在方法调用中使用 out 变量的位置声明该变量,使得在分配它之前不可能意外使用它
元组<br>
元组是包含多个字段以表示数据成员的轻量级数据结构。 这些字段没有经过验证,并且你无法定义自己的方法
弃元<br>
模式匹配
模式匹配是一种可以对除对象类型以外的属性实现方法分派的功能
Ref 局部变量和返回结果
此功能允许使用并返回对变量的引用的算法,这些变量在其他位置定义
本地函数
更多的 expression-bodied 成员
C# 6 为成员函数和只读属性引入了 expression-bodied 成员。 C# 7.0 扩展了可作为表达式实现的允许的成员。 在 C# 7.0 中,你可以在属性和索引器上实现构造函数、终结器以及 get 和 set 访问器。
引发表达式 <br>
通用的异步返回类型
新语言功能意味着异步方法返回类型不限于 Task、Task<T> 和 void。 返回类型必须仍满足异步模式,这意味着 GetAwaiter 方法必须是可访问的。
数字文本语法改进
收藏
收藏
0 条评论
下一页