Build 2018大会:C#的未来(2)

不用觉得奇怪,这个语法主要是受Python启发,主要的区别是C#不能使用-1表示数组末尾索引,因为那在.NET数组中已经有一个意思了。因此,我们使用^1语法代替。

GitHub上提供了索引和范围的预览

IAsyncDisposable

顾名思义,该接口允许对象暴露一个DisposeAsync方法。与此对应的是新语法“using async”,它和普通的using块一样,但增加了等待dispose调用的功能。

异步枚举

和IEnumerable类似,IAsyncEnumerable让你可以枚举一个长度未知的有限列表。不过,配备的枚举器看上去有轻微的差别。它暴露了两个方法:

Task<bool> WaitForNextAsync(); T TryGetNext(out bool success);

该接口有一个有趣的特性,就是允许你批量读取数据。你针对批次中的每一个数据项调用TryGetNext方法。当返回success=false时,你可以调用WaitForNextAsync获取一个新的批次。

这之所以重要,是因为大多数进入应用程序的数据要么是按批次,要么是从网络流入。当你调用TryGetNext时,数据大多数时候都已经是可用的。分配一个Task对象有点浪费,除非你用完了输入缓冲区中的数据,并且仍然希望能够异步等待更多数据。

在理想情况下,你不会经常直接使用这些接口。取而代之,微软希望你使用异步迭代器语法“foreach await”,我们去年预览过。它会根据需要处理同步或异步方法的调用。

默认接口方法

这个灵感来自Java颇具争议的特性仍然被考虑加入C# 8中。简单来说,它让你可以添加新方法及其实现,达到接口演化的目的。这样,新方法不会破坏向后兼容性。

记录

记录是一种快速创建不可变类的语法。我们第一次看到这个提案是在2014年。当前的例子如下:

class Person(string FirstName, string LastName);

从根本上说,它完全是一个由构造函数签名定义的类。对于一个不可变类,你想要的所有属性和方法都是自动生成的。

查看英文原文Build 2018: The Future of C#

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/1751138c8ab356e91d3a362def038209.html