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 版本也發佈了。async
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 中,將引用類型設爲非空,成爲了一個可選的特性。ui
爲C #引入這樣的特性是很困難的,由於這爲本來已經運行很好的代碼,引入了潛在的編譯錯誤。所以須要作的是,建立此功能的方法,而不是爲開發人員帶來沒法估量的工做量。設計
根據設計方案,C# 團隊決定採起一個容許開發者能夠選擇可空引用類型的方法。這將是一個工程級別的設定,以便啓用對可空引用的驗證。一旦啓用,可接受 null 值的對象就須要使用?運算符進行聲明。
以下代碼:
String s = null; Console.Write(s);
這將引發警告,由於字符串不能接受空值。所以須要如下代碼:
String? s = null; Console.Write(s);
然而,上面代碼也會在Console拋出一個警告,寫的是不但願收到一個空字符串。事實上,原始代碼可能有錯誤,因此級聯警告能夠幫助咱們避免運行時錯誤。這是最有可能提升代碼質量的語言變化。
C # 8.0 的一個很棒的新特性,是有一種新方式來建立一個被稱爲 records 的類。這個類本質上是一個很是輕量級的類,是一個字段集合,可以幫助快速建立 POCO 類型的對象,同時也能夠解決比較對象是否相等時的關鍵問題。
例如,爲銀行賬戶建立 record 類型:
class BankAccount(Guid Id, string Name, decimal Balance)
這是一種建立簡單類的很好的方法。
用 records 解決對象相等問題
在 C# 編程中,一個最難掌握的內容就是,將==運算符用於引用類型和原語之間的區別。
爲了舉例說明,咱們使用==對比兩個整數:
int I = 1; int j = 1; i == j //yields true
原語的值是相等的。可是,對於引用類型,卻不相等。
Object I = new Object(); Object j = new Object(); i == j //yields false
這是由於 C# 的引用類型比較會考慮引用相等,也就是說,只有當兩個對象是同一個對象才相等。records 類型提供告終構上的相等,等同於相等運算符。建立新 record 的語法很是簡潔,由於生成的對象是簡單的數據傳輸對象。
Records 是一個輕量級對象,使用起來很是方便。雖然 Records 不是語言的一個突破性的變化,但也是一個漸進的改進,值得歡迎。
版本控制接口可能會使人懊惱, 由於它要求接口上的新方法來實現接口上的全部對象。隨着新方法添加到了接口中,實現它們的任務就落在了實現接口的各個類中。由於各個實現沒必要須共有同一個父類,添加到接口的方法就能夠在各自的類中實現。
默認接口實現容許在接口中指定一個實現,只要它是接口上現有方法的函數實現的。下面再以銀行賬戶爲例:
public interface IBankAccountManager{ void PerformTransaction(decimal amount, string reason); }
如今爲了便於使用,咱們想在銀行帳戶上提供明確的借方和信譽功能。一般咱們會爲接口添加這些功能並在全部的類中實現它們。
public interface IBankAccountManager{ void PerformTransaction(decimal amount, string reason); void PerformDebit(decimal amount, string reason){ PerformTransaction(-1 * amount, $」Debit: {reason}」); } void PerformCredit(decimal amount, string reason){ PerformTransaction(amount, $」Credit: {reason}」); } }
默認接口實現提供了一種強大的新方法來擴展實現接口的類,而無需重複代碼。只需聽從默認實現,許多接口的類的實現就能夠獲得大大簡化。
正是由於這些新特性,才讓咱們絕不懷疑這就是 C# 8.0。如下是其它一些 C# 8.0 新特性:
提高擴展支持 – 這種提高不只僅能夠用於擴展方法,它還提供了對屬性、靜態方法和更多方面的支持。
異步數據流 – 可以擁有支持異步操做的枚舉值。包括新的 iasyncenumerable <T> 和 iasyncenumerator <T> 接口。
Async Disposable – iasyncdisposable 容許對象有一個異步的處理方法。
ComponentOne Studio Enterprise 是一款專一於企業應用的 .NET 全功能控件套包,支持 WinForms、WPF、UWP、ASP.NET MVC 等多個平臺,幫助您在縮減成本的同時,提早交付豐富的桌面、Web 和移動企業應用。控件支持的範圍普遍,包含了表格和數據管理、圖表和數據可視化、流行的UI界面等,爲企業應用開發提供高性能的控件工具。
過去幾年中,.NET 的創新速度確實加快了。雖然 C# 8.0 目前尚未實現,可是它比起 C# 7.0,將帶來不少有幫助的提高,讓咱們一塊兒期待 C# 8.0 的早日到來。
原文連接:https://dzone.com/articles/3-...
轉載請註明出自:葡萄城控件
葡萄城成立於1980年,是全球最大的控件提供商,世界領先的企業應用定製工具、企業報表和商業智能解決方案提供商,爲超過75%的全球財富500強企業提供服務。葡萄城於1988年在中國設立研發中心,在全球化產品的研發過程當中,不斷適應中國市場的本地需求,併爲軟件企業和各行業的信息化提供優秀的軟件工具和諮詢服務。