喜迎.NET Core 3.0 发布,C#8 新特性一览

如今, C# 8.0 伴随着 .NET Core 3.0 正式发布(2019年9月23日),本文沿着之前文章的内容一览 C# 8.0 的新特性。

1、Readonly members / 只读成员

可将readonly修饰符应用于结构的任何成员。

2、Default interface members / 默认接口成员

现在可以为接口的成员添加默认的实现。

3、Pattern matching enhancements / 模式匹配增强

a)Switch expressions / Switch 表达式

b)Property patterns / 属性模式

c)Tuple patterns / 元组模式

d)Positional patterns / 位置模式

4、Using declarations / Using 声明

using 声明是指使用using关键字的变量声明。它指示编译器声明的变量应在作用域末尾进行 dispose

5、Static local functions / 静态本地函数

现在可以向本地函数添加static修饰符,以确保本地函数不会从封闭范围捕获(引用)任何变量。

6、Disposable ref structs / 可处置的 ref 结构

用ref修饰符声明的struct可能无法实现任何接口,因此无法实现IDisposable。因此,要能够处理ref struct,它必须有一个可访问的void Dispose()方法。这同样适用于 readonly ref struct声明。

7、Nullable reference types / Nullable 引用类型

C# 8.0 中你可以使用项目文件中的配置“<Nullable>enable</Nullable>”或者使用 #nullable 上下文声明来使得引用类型像值类型一样不可为空,这种情况下你就可以使用 Nullable 引用类型,用法与 Nullable 值类型是一样的。

8、Asynchronous streams / 异步流

从 C# 8.0 开始,你可以创建和使用异步流。 一个返回异步流的方法有三个特点:

  1. async 修饰符声明的。
  2. 返回 IAsyncEnumerable<T>
  3. 包含了用于在异步流中返回连续元素的 yield return 语句。

9、Indices and ranges / 索引和范围

索引和范围为访问序列中的单个元素或范围提供了简洁的语法,比如可以"^"操作符从尾部开始索引。

10、 Null-coalescing assignment / Null合并赋值

C# 8.0 引入了 null 合并赋值运算符??=。仅当运算符左边计算结果为null时,才能使运算符??=右边的值分配给左边的变量。

11、Unmanaged constructed types / 非托管构造类型

在 C# 7.3 和更早版本中,构造类型(包含至少一个泛型类型参数的类型)不能为非托管类型。从 C# 8.0 开始,如果一个构造的值类型的成员均为非托管类型,那么该类型为非托管类型。

12、stackalloc in nested expressions / 嵌套表达式中的 stackalloc

从 C# 8.0 开始,如果stackalloc表达式的结果为System.Span<T>System.ReadOnlySpan<T>类型,就可以在其他表达式中内嵌使用stackalloc表达式。

13、Enhancement of interpolated verbatim strings / 内插逐字字符串的增强功能

内插逐字字符串中$@标记的顺序可以任意安排:$@"..."@$"..."均为有效的内插逐字字符串。在早期 C# 版本中,$标记必须出现在@标记之前。