C# 8 新增小功能

栏目: ASP.NET · 发布时间: 6年前

内容简介:尽管 C# 8 应该会在今年发布,并且 C# 8.x 和 9 的路线图也开始形成,但是,微软正在继续审查下一个版本的特性。假设我们有 A、B 和 C 三种类型,其中类型 B 和 C 是类型 A 的子类型。如果我们使用如下所示的语句,那么,编译器无法确定右侧要返回的类型。

尽管 C# 8 应该会在今年发布,并且 C# 8.x 和 9 的路线图也开始形成,但是,微软正在继续审查下一个版本的特性。

目标类型表达式

假设我们有 A、B 和 C 三种类型,其中类型 B 和 C 是类型 A 的子类型。如果我们使用如下所示的语句,那么,编译器无法确定右侧要返回的类型。

复制代码

Aa1=b?? c;
Aa2= x>0?b: c;
Aa3= aswitch{
Bb=>b,
C c => c,
_ => throw new System.Exception()
};

通常情况下,修复该问题需要添加强制转换,如:

复制代码

A a1=(A)b ??(A)c;
A a2= x>0?(A)b :(A)c;

根据 目标类型 switch 表达式提议 ,在每种情况下都允许编译器使用语句(A a1)的左侧来决定右侧(b ??c)应该返回的类型。该功能还可以用于返回语句(return b ?? c),但不能用于变量(var a1 = b ?? c)。

目前,这个(例 3)的模式匹配版本计划于 C# 8.0 中提供,其他两个则于 8.x 中提供。

允许在解构中使用“default”

根据该 提议 ,这个小功能将允许在初始化元组时使用 default 关键字:

复制代码

(int i, string s) =default;
(i, s) =default;

过时的属性

与 Visual Basic 不同,C# 无法把单个 getter 和 setter 标记为过时。相反,只能将属性作为整体做这样的标记。该 提议 纠正了这种情况。为了理解这个问题的重要性,请看看 Cory Nelson 的评论。

就在几个星期前,我试图清理一些大量使用 get/set 属性的代码,使其成为一个更加只读的初始化的构造函数(ctor-initialized),此时我发现我真希望该特性是这样的。

4 月,该特性从 C# 9 迁移到了 C# 8 上。

结构上的只读成员

当分配给只读字段或用作 in 参数时,结构上的方法有个性能小问题。如果我们调用结构上的方法,编译器首先会生成防御性副本。尽管这通常不足以产生问题,但是,在用于紧密循环(tight loop)时,细微的低效的确会累积出性能问题。

对于完全不可变的结构,可以 标记整个结构为只读 ,这样可以避免此类情况的发生。然而,出于性能的缘故,很多结构是可变的。

根据 只读示例方法 提议,开发人员将能够把单个方法标记为只读。这向编译器表明,防御性副本不是必要的,没有值会被修改。

这和 Pure 属性 不同,只要只读方法不修改结构本身的值,那么就有明显的副作用。

自动实现属性的 getter 将被自动认为是只读的。在某些情况下,setter 也可以被标记为只读。比如,当属性值存于字典中而不是直接存入结构本身的时候。

在目前的提议下,引用类型(类和接口)将不会受到该特性的支持。原因有三重:

  • 这么做,没有与性能相关的优势
  • 只读关键字不意味着状态不会改变,只是不会直接修改对象上的字段。
  • 这是只读结构的扩展,没有等效的只读类。

查看英文原文: C# 8 More Small Features


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Art and Science of CSS

The Art and Science of CSS

Jonathan Snooks、Steve Smith、Jina Bolton、Cameron Adams、David Johnson / SitePoint / March 9, 2007 / $39.95

Want to take your CSS designs to the next level? will show you how to create dozens of CSS-based Website components. You'll discover how to: # Format calendars, menus and table of contents usin......一起来看看 《The Art and Science of CSS》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换