主页»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中的特性,由于它需求更改底层的运行时。

QQ群:凯发娱乐官网官方群(515171538),验证音讯:10000
微信群:加小编微信 849023636 邀请您参加,验证音讯:10000
提示:更多精彩内容重视微信大众号:全栈开发者中心(fsder-com)
C#
网友谈论(共0条谈论) 正在载入谈论......
沉着谈论文明上网,回绝歹意咒骂 宣布谈论 / 共0条谈论
登录会员中心