天天看點

C# 8.0的三個值得關注的新特性加快 C# 版本的釋出速度非空和可空的引用類型新的輕量級類:Records預設接口實作其它的 C# 8.0 新特性結論

C# 8.0的三個值得關注的新特性加快 C# 版本的釋出速度非空和可空的引用類型新的輕量級類:Records預設接口實作其它的 C# 8.0 新特性結論

C# 語言是在2000釋出的,至今已正式釋出了7個版本,每個版本都包含了許多令人興奮的新特性和功能更新。同時,C# 每個版本的釋出都與同時期的 Visual Studio 以及 .NET 運作時版本高度耦合,這也有助于開發者更好的學習掌握 C#,并将其與 Visual Studio 以及 .NET 的使用結合起來。

在被稱為“新微軟”的推動下,微軟創新的步伐也加快了。為了做到加快步伐,微軟開發部門将一些過去內建在一起的技術現在都分離了出來。

Visual Studio、.NET Framework、.NET 運作時、編譯器和編譯運作時的運作語言都被拆分成自己的包和版本,這意味着以上每一個都可以按照自己的節奏釋出了。現在,我們已經看到了這種模式的成功。.NET Core 2.0 的工作已經完成了,并從 Visual Studio 釋出出來,同時也增加了對 Linux 的支援。幾乎與 .NET Core 2 釋出的同時,C# 7.1 版本也釋出了。

C# 7.1 是一個重要的釋出版本,雖然新功能不多,但它卻是 C# 第7個大版本的開始。C# 7.2 版本的工作已經展開了,同時也在計劃着 C# 7.3 版本。盡管 C# 8.0 版本還有點遠,但是微軟技術人員已經對 C# 8.0 版本的特性有了一些想法。

語言設計的讨論是公開的,圍繞 C# 8.0 版本新特性的問題部分也進行了廣泛的讨論。檢查每個發行版本的裡程碑,同時也為未來的 C# 路線圖做好評估。

下面正式開始介紹 C# 8.0 版本中值得關注的三個新特性。

C# 有兩大變量類型:基本類型和引用類型。原先的類型是 int、char 和 double。這些類型都不能接受 null 值。在不配置設定新值的情況下,建立一個新的 int 值,會導緻 int 值為 0 而不是 null。C# 2.0 介紹了帶有“?”符号的變量原語的可空版本。是以,int?是 int 的一個版本,它可以接受空值。

另一方面,引用類型(如字元串這樣的對象)始終能夠接受 null 值,并将 null 作為預設值。這也帶了來一個缺點,就是可能導緻應用程式中帶入空引用。

在 C# 8.0 中,将引用類型設為非空,成為了一個可選的特性。

為 C# 引入這樣的特性是很困難的,因為這為原本已經運作很好的代碼,引入了潛在的編譯錯誤。是以需要做的是,建立此功能的方法,而不是為開發人員帶來無法估量的工作量。

根據設計方案,C# 團隊決定采取一個允許開發者可以選擇可空引用類型的方法。這将是一個工程級别的設定,以便啟用對可空引用的驗證。一旦啟用,可接受 null 值的對象就需要使用?運算符進行聲明。

如下代碼:

這将引起警告,因為字元串不能接受空值。是以需要以下代碼:

然而,上面代碼也會在Console抛出一個警告,寫的是不希望收到一個空字元串。事實上,原始代碼可能有錯誤,是以級聯警告可以幫助我們避免運作時錯誤。這是最有可能提高代碼品質的語言變化。

C# 8.0 的一個很棒的新特性,是有一種新方式來建立一個被稱為 records 的類。這個類本質上是一個非常輕量級的類,是一個字段集合,能夠幫助快速建立 POCO 類型的對象,同時也可以解決比較對象是否相等時的關鍵問題。

例如,為銀行帳戶建立 record 類型:

這是一種建立簡單類的很好的方法。

用 records 解決對象相等問題

在 C# 程式設計中,一個最難掌握的内容就是,将==運算符用于引用類型和原語之間的差別。

為了舉例說明,我們使用==對比兩個整數:

原語的值是相等的。但是,對于引用類型,卻不相等。

這是因為 C# 的引用類型比較會考慮引用相等,也就是說,隻有當兩個對象是同一個對象才相等。records 類型提供了結構上的相等,等同于相等運算符。建立新 record 的文法非常簡潔,因為生成的對象是簡單的資料傳輸對象。

Records 是一個輕量級對象,使用起來非常友善。雖然 Records 不是語言的一個突破性的變化,但也是一個漸進的改進,值得歡迎。

版本控制接口可能會令人懊惱, 因為它要求接口上的新方法來實作接口上的所有對象。随着新方法添加到了接口中,實作它們的任務就落在了實作接口的各個類中。因為各個實作不必須共有同一個父類,添加到接口的方法就可以在各自的類中實作。

預設接口實作允許在接口中指定一個實作,隻要它是接口上現有方法的函數實作的。下面再以銀行帳戶為例:

現在為了便于使用,我們想在銀行賬戶上提供明确的借方和信譽功能。通常我們會為接口添加這些功能并在所有的類中實作它們。

預設接口實作提供了一種強大的新方法來擴充實作接口的類,而無需重複代碼。隻需遵從預設實作,許多接口的類的實作就可以得到大大簡化。

正是因為這些新特性,才讓我們毫不懷疑這就是 C# 8.0。以下是其它一些 C# 8.0 新特性:

提升擴充支援 – 這種提升不僅僅可以用于擴充方法,它還提供了對屬性、靜态方法和更多方面的支援。

異步資料流 – 能夠擁有支援異步操作的枚舉值。包括新的 iasyncenumerable <T> 和 iasyncenumerator <T> 接口。

Async Disposable – iasyncdisposable 允許對象有一個異步的處理方法。

過去幾年中,.NET 的創新速度确實加快了。雖然 C# 8.0 目前還沒有實作,但是它比起 C# 7.0,将帶來很多有幫助的提升,讓我們一起期待 C# 8.0 的早日到來。

原文連結:https://dzone.com/articles/3-new-c-8-features-we-are-excited-about

轉載請注明出自:葡萄城控件

相關閱讀:

<a href="http://www.grapecity.com.cn/enterprise-solutions/activereports_server/library/" target="_blank">【報表福利大放送】100餘套報表模闆免費下載下傳</a>

<a href="http://www.cnblogs.com/powertoolsteam/p/migrating-to-aspnet-core-20.html">為什麼你需要将代碼遷移到ASP.NET Core 2.0?</a>

<a href="http://www.cnblogs.com/powertoolsteam/p/net_core_2.html" target="_blank">是什麼優化讓 .NET Core 性能飙升?</a>

<a href="http://www.cnblogs.com/powertoolsteam/p/csharp.html" target="_blank">C#開發人員應該知道的13件事</a>

繼續閱讀