[翻译] C# 8.0 预览
原文: 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 预览的更多相关文章
- C# 8.0 预览特性
初试C# 8.0 Visual Studio 2019的第一个预览版(使用Visual Studio 2019提高每个开发人员的工作效率)和.NET Core 3.0(宣布.NET Core 3预览1 ...
- Apache Spark 3.0 预览版正式发布,多项重大功能发布
2019年11月08日 数砖的 Xingbo Jiang 大佬给社区发了一封邮件,宣布 Apache Spark 3.0 预览版正式发布,这个版本主要是为了对即将发布的 Apache Spark 3. ...
- 微软.NET CORE 3.0 预览版 7 发布:大幅减少 SDK 空间大小
据悉,这个预览版是 .Net Core 3 中重要的版本,可以视为原计划在 7 月发布的 RC 版本 (引自微软 .NET Core 首席 Program Manager Richard 先生原话), ...
- Dubbo 3.0 预览版解读,6到飞起~
, false).start(); ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new St ...
- 挑战中英实时语音翻译——Skype Translator 中文预览版登陆中国
Translator 中文预览版登陆中国" title="挑战中英实时语音翻译--Skype Translator 中文预览版登陆中国"> 今天,我们正式宣布在中国 ...
- 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 ...
- 安装.NET Core 3.0预览版后VS项目目标框架中不显示的解决方法
下载了微软在GitHub上的cSharpSamples项目后发现其中一些项目使用框架为.NET Core3.0,就下载了.NET Core3.0,但发现项目依然不可用,编译时提示如下 当前 .net ...
- .NET Core 3.0预览版7中的ASP.NET Core和Blazor更新
.NET Core 3.0 Preview 7现已推出,它包含一系列ASP.NET Core和Blazor的新更新. 以下是此预览中的新功能列表: 最新的Visual Studio预览包括.NET C ...
- .NET 5.0预览版6发布:支持Windows ARM64设备
2020年6月25日,微软dotnet团队在博客宣布了第六个 .NET 5.0 的预览版:https://devblogs.microsoft.com/dotnet/announcing-net-5- ...
随机推荐
- linux中日志介绍
linux日志 linux日志大多是以明文存储,一般存储在/var/log目录中,linux系统中主要有三个日志子系统:连接时间日志,进程统计日志,错误日志. 连接时间日志 连接时间日志是有多个程序执 ...
- 字典的定义和操作 (Python)
字典是由key and value 构成,无序结构(不想列表那样有固体位置): note:key 是唯一的,没有重复: 字典可以多级嵌套: 定义: dict1 = { # 由等式构成 dict = { ...
- 【转载】BAT 批处理脚本教程
来源:http://www.cnblogs.com/glaivelee/archive/2009/10/07/1578737.html BAT 批处理脚本 教程 第一章 批处理基础第一节 常用批处 ...
- python之总体理解
作为脚本,python具备了弱类型语言的灵活性,便捷性.这在日常的开发使用中能够大幅度的减轻开发人员的编码负担,开发者也能够将精力集中在程序的逻辑管理和总体构架设计上.一般而言,随着经验的积累,开发人 ...
- python之基本内容
这里提供在使用python进行开发中常使用到的方法技巧,如有不对欢迎批评指正. 要点:开发中类.变量特性查询,类型就是类,断言的使用,深浅复制判断等 python脚本文件是使用UTF-8编码的,所以在 ...
- Java 9 揭秘(17. Reactive Streams)
Tips 做一个终身学习的人. 在本章中,主要介绍以下内容: 什么是流(stream) 响应式流(Reactive Streams)的倡议是什么,以及规范和Java API 响应式流在JDK 中的AP ...
- git远程仓库之从远程库克隆
上次我们讲了先有本地库,后有远程库的时候,如何关联远程库. 现在,假设我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆. 首先,登陆GitHub,创建一个新的仓库,名字叫gitskill ...
- 页面发送请求到后台报错“Empty or invalid anti forgery header token.”问题解决
在页面向后台发送请求时,报如上图的错误的解决办法: 在WebModule.cs类中的PreInitialize方法中加 Configuration.Modules.AbpWeb().AntiForge ...
- akoj-1073- Let the Balloon Rise
Let the Balloon Rise Time Limit:1000MS Memory Limit:65536K Total Submit:92 Accepted:58 Description ...
- Hbase架构与原理
Hbase架构与原理 HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang所撰写的Google论文"Bigtable:一个结构化数据的分布式存储系统".就 ...