码迷,mamicode.com
首页 > Windows程序 > 详细

C#8.0 新增功能

时间:2019-07-17 17:02:25      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:sqrt   应用   类型   索引   get   很多   -128   res   read   

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 新增功能

标签:sqrt   应用   类型   索引   get   很多   -128   res   read   

原文地址:https://www.cnblogs.com/SavionZhang/p/11201818.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!