乐博娱乐»ASP.NET»微软C# 8.0中的几个特性

微软C# 8.0中的几个特性

来源:infoq.com 宣布时间:2017-09-06 阅读次数:乐博

  概述:可空的引用类型可归纳综合地表述为,引用类型将不再默认可空。因此,乐博娱乐开发人员必须使用界说可空值类型的同样语法“Type?”,显式地标志一个引用类型为可空。

 乐博

  可空的引用类型(Nullable Reference Types)

  可空的引用类型可归纳综合地表述为,引用类型将不再默认可空。因此,乐博娱乐开发人员必须使用界说可空值类型的同样语法“Type?”,显式地标志一个引用类型为可空。

  如果将一个空值赋值给一个非可空的引用类型,那么将会给出一个编译器警告。与之相类似,从可空类型中读取也会给出编译器警告,除非显式地提前检查了被质疑的变量是否为空值。因此从理论上讲,乐博娱乐开发人员需要做的唯一更改就是在代码的适当位置标上问号。

  该特性新加了一个语法。该语法针对乐博娱乐开发人员明知一个可空变量x并非实际为空值却无法证明给编译器的情况。在上述情况下,乐博娱乐开发人员现在可以界说x!.Method(),消除编译器对于潜在空值引用异常的警告。

  异步流(Async Streams),即foreach async

  异步流是IEumerable的异步等价类。C#团队自2015以来就一直在努力实现异步流。在经历了许多争议后,其语法被定为

foreach await (string s in asyncStream)

  乐博娱乐开发人员将使用如下的函数签名界说一个异步迭代器:

async IAsyncEnumerable MethodName()

  就像使用一个正常的IEnumerable要领一样,乐博娱乐开发人员可以使用“yield return”以懒方式(Lazy)构建工具流。

  相比于源自响应式扩展(Reactive Extensions)的IObservable,使用这一要领的优点在于让消费者控制流速,这被称为“Pull模式”。与之相对,IObservable是一种“Push模式”,这意味着生产者可以使用高于消费者所能处置惩罚的流速让流涌向消费者。

  缺省接口实现(Default Interface Implementations)

  缺省接口实现在本质上是一种有限形式的多重继续。它允许抽象接口像抽象类一样,对要领进行完全的界说,只是抽象接口依然不能界说结构函数和字段。

  需注意,乐博娱乐开发人员可以通过使用ConditionalWeakTable在接口上模拟字段。

  默认接口实现的主要利益是,乐博娱乐开发人员可以在不破坏向后兼容的条件下,将一个新要领添加到一个已有的接口中。但是这并非是有保证的,因为默认接口只是在可以设计出适合的默认要领时才气事情。

  扩展(Extension)

  乐博娱乐开发人员可以编写扩展要领,但是不能扩展属性,这是恒久以来对C#一直存在的一个问题。事实上,如果使用当前的模式,甚至是不能界说一个扩展属性或事件的。此外,在许多乐博娱乐开发人员看来,在静态类中放置扩展要领是“很诡异的”。

  新的设计中新给出了一种称为“扩展”(Extension)的顶层语言构件。例如,如果乐博娱乐开发人员想要为自界说的Customer类创建一个扩展要领和属性,可编写如下代码:

extension CustomerExt extends Customer {
    //界说要领和属性的代码。
}

  就接口而言,是不能在扩展中界说实例字段的,但是可以使用ConditionalWeakTable实现模拟。界说静态字段也是允许的。

  除了对属性、事件和操作符重载的扩展,C#团队甚至考虑允许扩展结构函数。扩展结构函数很是适用于工厂模式(Factory)和工具池场景。

  扩展接口(Extension Interfaces)

  C#团队还考虑了扩展接口,即在已有类中添加新接口的能力。但是扩展接口将不会成为C# 8中的特性,因为它需要更改底层的运行时。

乐博C#