1. <em id="2qvri"><tr id="2qvri"></tr></em>
      1. 首頁»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條評論
        登錄會員中心
        江苏快3投注技巧