一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C# - C# 8.0新特性介紹

C# 8.0新特性介紹

2022-01-25 14:17葡萄城控件技術團隊 C#

C# 語言是在2000發布的,至今已正式發布了7個版本,每個版本都包含了許多令人興奮的新特性和功能更新。下面通過本文給大家分享下C# 8.0的三個令人興奮的新特性,需要的朋友參考下吧

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

C# 8.0新特性介紹

加快 c# 版本的發布速度

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

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 值的對象就需要使用?運算符進行聲明。

如下代碼:

?
1
2
string s = null;
console.write(s);

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

?
1
2
string? s = null;
console.write(s);

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

新的輕量級類:records

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

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

?
1
class bankaccount(guid id, string name, decimal balance)

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

用 records 解決對象相等問題

在 c# 編程中,一個最難掌握的內容就是,將==運算符用于引用類型和原語之間的區別。

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

?
1
2
3
int i = 1;
int j = 1;
i == j //yields true

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

?
1
2
3
object i = new object();
object j = new object();
i == j //yields false

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

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

默認接口實現

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

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

?
1
2
3
public interface ibankaccountmanager{
 void performtransaction(decimal amount, string reason);
}

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

?
1
2
3
4
5
6
7
8
9
10
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。以下是其它一些 c# 8.0 新特性:

  • 提升擴展支持 – 這種提升不僅僅可以用于擴展方法,它還提供了對屬性、靜態方法和更多方面的支持。
  • 異步數據流 – 能夠擁有支持異步操作的枚舉值。包括新的 iasyncenumerable <t> 和 iasyncenumerator <t> 接口。
  • async disposable – iasyncdisposable 允許對象有一個異步的處理方法。 

結論

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

原文鏈接:http://www.cnblogs.com/powertoolsteam/p/3-new-c-8-features.html

延伸 · 閱讀

精彩推薦
  • C#Unity3D實現虛擬按鈕控制人物移動效果

    Unity3D實現虛擬按鈕控制人物移動效果

    這篇文章主要為大家詳細介紹了Unity3D實現虛擬按鈕控制人物移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

    shenqingyu060520232410972022-03-11
  • C#C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    E-iceblue5012022-02-12
  • C#C#通過KD樹進行距離最近點的查找

    C#通過KD樹進行距離最近點的查找

    這篇文章主要為大家詳細介紹了C#通過KD樹進行距離最近點的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    帆帆帆6112022-01-22
  • C#C#實現XML文件讀取

    C#實現XML文件讀取

    這篇文章主要為大家詳細介紹了C#實現XML文件讀取的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Just_for_Myself6702022-02-22
  • C#C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長...

    GhostRider9502022-01-21
  • C#深入解析C#中的交錯數組與隱式類型的數組

    深入解析C#中的交錯數組與隱式類型的數組

    這篇文章主要介紹了深入解析C#中的交錯數組與隱式類型的數組,隱式類型的數組通常與匿名類型以及對象初始值設定項和集合初始值設定項一起使用,需要的...

    C#教程網6172021-11-09
  • C#WPF 自定義雷達圖開發實例教程

    WPF 自定義雷達圖開發實例教程

    這篇文章主要介紹了WPF 自定義雷達圖開發實例教程,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下...

    WinterFish13112021-12-06
  • C#C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    吳 劍8332021-12-08
主站蜘蛛池模板: 四虎库 | 丝袜白浆 | 青草青草视频2免费观看 | 无限在线看免费视频大全 | 国产高清露脸学生在线观看 | 91亚洲精品丁香在线观看 | 亚洲 欧美 成人 | 猫咪社区在线播放 | 好紧水好多 | 亚洲午夜久久久久影院 | 亚洲日本视频在线 | 国产综合久久久久 | 高跟翘臀老师后进式视频 | 日本欧美一二三区色视频 | 98pao强力打造高清免费 | 3黑人巨大vs北岛玲 3d肉浦团在线观看 3d动漫免费 | 花蝴蝶www | 九九国产在线视频 | 色热综合| 免费lulu网站 | 成人在线视频在线观看 | 色久激情 | 精品久久一 | 国产一区二区三区在线观看视频 | 国产成人无精品久久久久国语 | 亚洲性综合网 | 和日本免费不卡在线v | 青草娱乐极品免费视频 | 久久久亚洲国产精品主播 | 国产美女亚洲精品久久久久久 | 九九99亚洲精品久久久久 | 石原莉奈被店长侵犯免费 | 俺去俺来也www色官网免费的 | 特大黑人娇小亚洲女mp4 | 国产99精品成人免费视频 | 欧美日韩精品一区二区三区视频 | 久久婷婷五月综合色精品首页 | re99热| 亚洲色图第一页 | 亚洲羞羞裸色私人影院 | 日本www视频在线观看 |