C#8.0 新增功能

Posted savionzhang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#8.0 新增功能相关的知识,希望对你有一定的参考价值。

C#8.0提供了许多增强功能

01 Readonly 成员
可将 readonly 修饰符应用于结构的任何成员。 它指示该成员不会修改状态。 这比将 readonly 修饰符应用于 struct 声明更精细。 请考虑以下可变结构:
public struct Point

    public double X  get; set; 
    public double Y  get; set; 
    public double Distance => Math.Sqrt(X * X + Y * Y);

    public override string ToString() => $"(X, Y) is Distance from the origin";

像大多数结构一样, ToString() 方法不会修改状态。 可以通过将 readonly 修饰符添加到 ToString() 的声明来对此进行指示:

public readonly override string ToString() => $"(X, Y) is Distance from the origin";

上述更改会生成编译器警告,因为 ToString 访问 Distance 属性,该属性未标记为 readonly

warning CS8656: Call to non-readonly member Point.Distance.get from a readonly member results in an implicit copy of this

需要创建防御性副本时,编译器会发出警告。 Distance 属性不会更改状态,因此可以通过将 readonly 修饰符添加到声明来修复此警告:

public readonly double Distance => Math.Sqrt(X * X + Y * Y);

请注意,readonly 修饰符对于只读属性是必需的。 编译器不会假设 get 访问器不修改状态;必须明确声明 readonly。 编译器会强制实施以下规则:readonly 成员不修改状态。除非删除 readonly 修饰符,否则不会编译以下方法:

public readonly void Translate(int xOffset, int yOffset)

    X += xOffset;
    Y += yOffset;

技术图片

通过此功能,可以指定设计意图,使编译器可以强制执行该意图,并基于该意图进行优化。

02 默认接口成员

现在可以将成员添加到接口,并为这些成员提供实现。 借助此语言功能,API 作者可以将方法添加到以后版本的接口中,而不会破坏与该接口当前实现的源或二进制文件兼容性。 现有的实现继承默认实现 。 此功能使 C# 与面向 android 或 Swift 的 API 进行互操作,此类 API 支持类似功能。 默认接口成员还支持类似于“特征”语言功能的方案。

默认接口成员会影响很多方案和语言元素。 请参考使用默认实现更新接口

03 在更多位置中使用更多模式
04 using 声明
05 静态本地函数
06 可处置的 ref 结构
07 可为空引用类型
08 异步流
09 索引和范围

以上是关于C#8.0 新增功能的主要内容,如果未能解决你的问题,请参考以下文章

C# 8.0 中的新增功能

Espressif-IDE v2.8.0 新增功能及开发方向

MySQL 8.0 新增复制功能;TensorFlow 1.1.0 添加部分语言的安装指南 | 软件周刊

C#各版本新增加功能

sns社交系统ThinkSNS+ 更新至V0.8.2,新增圈子功能

C#各版本新增加功能