原文: C# 8.0 Previewed

在一个Channel 9 的视频中,Mads Torgersen展示了C#8的首批四个新特性。

可空引用类型

过去我们报道过可空引用类型,简单地说,默认情况下引用类型将不再能为空。相应的,您必须使用与可空值类型相同的 Type? 语法将其明确标记为可空。

将 null 分配给不可为空的引用类型将得到一个编译器警告。 同样,从可空类型读取也将得到一个编译器警告,除非提前对有问题的变量进行显式检查。 所以理论上开发者需要做的唯一改变是适当情况下加上问号。

自从我们的报告,这个特性添加了一个新的语法。 考虑一种情况,你明知道可空变量x实际上不是空值,但却无法编译器证明。 在这种情况下,可以使用 x!.Method() 来禁止编译器对潜在空引用异常的警告。

异步流 (即 foreach async)

异步流类似于 IEnumerable 的异步方式。 正如我们之前报道的,异步流是自2015年以来一直在努力推进的事。经过多次讨论,最终确定的语法是:

foreach await (string s in asyncStream)

使用下面的方法签名来定义一个异步迭代器

async IAsyncEnumerable<T> MethodName()

与普通的 IEnumberable 方法一样,你可以使用 yield return 来懒式的构建一个对象流。

与Reactive Extensions库里的IObservable相比,这个方案的好处是消费者可以控制流量。这被称为“拉模型”,而IObservable是一种“推模型”,这意味着生产者可以向消费者提供比它所能处理的更高的流量来消耗消费者。

默认接口实现

默认接口实现本质上是一种有限的多重继承形式。 这将允许抽象接口完全定义方法,就像抽象类一样。 然而,抽象接口仍然无法声明构造方法或字段。

注意:你可以使用 ConditionalWeakTable 模拟在接口上的字段。

默认接口实现的主要好处是,你可以向现有的接口添加新的方法而不破坏向后兼容性。 但是这不能保证,因为只有当一个合适的默认方法被设计出来时,它才会起作用。

这是一个非常有争议的功能。 我们不会在这里重复这些讨论,但可以在早期关于默认接口实现的文章中阅读相关总结。

扩展一切

一项对C#的长期抱怨是只可以编写扩展方法,但不能扩展属性。 事实上,在当前模式下都没有办法定义扩展属性或事件。 另外,将扩展方法放在静态类中对许多人来说感觉很奇怪。

在新设计下,有一个新的顶级结构称为“扩展”。 例如,如果要为 Customer 类创建扩展方法和属性,你可以写:

extension CustomerExt extends Customer { //methods and properties go here }

与接口一样,你不能在扩展中定义实例字段,但可以使用ConditionalWeakTable来模拟它们。 你还可以定义静态字段。

除了属性,事件和操作符重载之外,甚至正在考虑允许扩展构造方法。 扩展构造方法在工厂和对象池方案中将非常有趣。

扩展接口

扩展接口,将新接口添加到现有类的能力,也在考虑之中。不过这不会是一个 C# 8 的功能,因为它需要更改底层运行时。

有关C#的未来的更多信息,请查看C#语言设计仓库。

[翻译] C# 8.0 预览的更多相关文章

  1. C# 8.0 预览特性

    初试C# 8.0 Visual Studio 2019的第一个预览版(使用Visual Studio 2019提高每个开发人员的工作效率)和.NET Core 3.0(宣布.NET Core 3预览1 ...

  2. Apache Spark 3.0 预览版正式发布,多项重大功能发布

    2019年11月08日 数砖的 Xingbo Jiang 大佬给社区发了一封邮件,宣布 Apache Spark 3.0 预览版正式发布,这个版本主要是为了对即将发布的 Apache Spark 3. ...

  3. 微软.NET CORE 3.0 预览版 7 发布:大幅减少 SDK 空间大小

    据悉,这个预览版是 .Net Core 3 中重要的版本,可以视为原计划在 7 月发布的 RC 版本 (引自微软 .NET Core 首席 Program Manager Richard 先生原话), ...

  4. Dubbo 3.0 预览版解读,6到飞起~

    , false).start(); ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new St ...

  5. 挑战中英实时语音翻译——Skype Translator 中文预览版登陆中国

    Translator 中文预览版登陆中国" title="挑战中英实时语音翻译--Skype Translator 中文预览版登陆中国"> 今天,我们正式宣布在中国 ...

  6. ASP.NET Core 3.0预览版体验

    目前.NET Core 3.0的版本为.NET Core 3.0 Preview 3,对应ASP.NET Core 3.0 Preview 3. ASP.NET Core 3.0 之后将不再支持.NE ...

  7. 安装.NET Core 3.0预览版后VS项目目标框架中不显示的解决方法

    下载了微软在GitHub上的cSharpSamples项目后发现其中一些项目使用框架为.NET Core3.0,就下载了.NET Core3.0,但发现项目依然不可用,编译时提示如下 当前 .net ...

  8. .NET Core 3.0预览版7中的ASP.NET Core和Blazor更新

    .NET Core 3.0 Preview 7现已推出,它包含一系列ASP.NET Core和Blazor的新更新. 以下是此预览中的新功能列表: 最新的Visual Studio预览包括.NET C ...

  9. .NET 5.0预览版6发布:支持Windows ARM64设备

    2020年6月25日,微软dotnet团队在博客宣布了第六个 .NET 5.0 的预览版:https://devblogs.microsoft.com/dotnet/announcing-net-5- ...

随机推荐

  1. Java之面向对象概述,类,构造方法,static,主方法,对象

    一.面向对象概述 面向过程 "面向过程"(Procedure Oriented)是一种以过程为中心的编程思想.这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响 ...

  2. 51nod_1120:机器人走方格 V3

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1120 Catalan数 基础题,ans=C(2n-2,n-2 ...

  3. 基于python的二元霍夫曼编码译码详细设计

    一.设计题目 对一幅BMP格式的灰度图像(个人证件照片)进行二元霍夫曼编码和译码 二.算法设计 (1)二元霍夫曼编码: ①:图像灰度处理: 利用python的PIL自带的灰度图像转换函数,首先将彩色图 ...

  4. Struts2入门项目开发小步骤

    Step1: Struts2的获取和添加到项目中: 在官方网站:http://struts.apache.org 获取Struts的其中一个版本. 在开发项目之前,需要添加struts2的类库支持,也 ...

  5. 一步一步学Vue(五)

    本篇是是vue路由的开篇,会以一个简单的demo对vue-router进行一个介绍,主要覆盖以下几个常用场景: 1.路由跳转 2.嵌套路由 3.路由参数 1.Vue-Router 一般来说,路由定义就 ...

  6. (转)Java多线程编程总结

    -------------------------------------------------------------------------------------------------   ...

  7. 灵玖Nlpir Parser智能挖掘汉语精准分词

    在中文自然语言处理中,词是最小的能够独立活动的有意义的语言成分.汉语是以字为基本书写单位,词语之间没有明显的区分标记,因此进行中文自然语言处理通常是先将汉语文本中的字符串切分成合理的词语序列,然后再在 ...

  8. Redis-位图法实现简单统计

    比如一个网站有1亿个用户, 现在要统计一周内连续登录的用户 方法: 可以用一个字节8个位表示7个人, 首位不算固定为0, 若某人周一登录则置为1, 没登录则为0 127.0.0.1:6379> ...

  9. AngularJs学习笔记3-服务及过滤器

    距离上次别博客有有一段时间了,因为最近公司和个人事情比较多,也因为学习新的知识所以耽搁了,也有人说Angularjs1.5没有人用了,没必要分享,我个人感觉既然开头了我就坚持把他写完,对一些还在使用或 ...

  10. swift3.0 底部弹出菜单 UIAlertController的使用

    let optionMenuController = UIAlertController(title: nil, message: "选择图片", preferredStyle: ...