首頁»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群:WEB開發者官方群(515171538),驗證消息:10000
微信群:加小編微信 849023636 邀請您加入,驗證消息:10000
提示:更多精彩內容關注微信公眾號:全棧開發者中心(fsder-com)
C#
網友評論(共0條評論) 正在載入評論......
理智評論文明上網,拒絕惡意謾罵 發表評論 / 共0條評論
登錄會員中心
快乐彩票开奖号码 文安县| 准格尔旗| 海城市| 蒲江县| 武功县| 五大连池市| 微山县| 汉寿县| 华容县| 应城市| 城市| 怀宁县| 四会市| 夹江县| 刚察县| 襄城县| 洪江市| 防城港市| 唐河县| 万载县| 泾川县| 石屏县| 城口县| 隆尧县| 乌海市| 鸡西市| 定西市| 镇巴县| 麻阳| 惠州市| 旅游| 开平市| 浑源县| 定南县| 安国市| 安新县| 益阳市| 南京市| 抚宁县| 阿拉善左旗| 胶南市| 碌曲县| 大英县| 上虞市| 长宁县| 呼图壁县| 慈溪市| 波密县| 乳源| 章丘市| 松江区| 永平县| 昭苏县| 故城县| 贵州省| 米易县| 天镇县| 新建县| 东山县| 东明县| 东阿县| 龙川县| 西安市| 搜索| 石泉县| 延庆县| 来安县| 台州市| 宜宾县| 称多县| 水富县| 右玉县| 江阴市| 五峰| 定西市| 安乡县| 安宁市| 陈巴尔虎旗| 韶关市| 东乡县| 黑河市| 贡山| 玛沁县| 巴塘县| 广饶县| 额尔古纳市| 灵川县| 安阳县| 宣汉县| 灵寿县| 徐水县| 扬州市| 青岛市| 叶城县| 白银市| 远安县| 永和县| 华容县| 台州市| 凤翔县| 彰武县| 伊宁县| 密云县| 大港区| 佛教| 乌海市| 平武县| 尉犁县| 紫云| 赫章县| 茌平县| 衡南县| 鸡西市| 巴青县| 万全县| 安达市| 怀安县| 葵青区| 灵台县| 长宁区| 宁武县| 大英县| 晴隆县| 易门县| 开原市| 博客| 巩义市| 康马县| 牟定县| 龙口市| 新郑市| 浮山县| 泸州市| 吴忠市| 会理县| 乐亭县| 花莲县|