C# 8.0的三個(gè)值得關(guān)注的新特性

C# 語言是在2000發(fā)布的已日,至今已正式發(fā)布了7個(gè)版本弄喘,每個(gè)版本都包含了許多令人興奮的新特性和功能更新荠瘪。同時(shí)茵休,C# 每個(gè)版本的發(fā)布都與同時(shí)期的 Visual Studio 以及 .NET 運(yùn)行時(shí)版本高度耦合,這也有助于開發(fā)者更好的學(xué)習(xí)掌握 C#造成,并將其與 Visual Studio 以及 .NET 的使用結(jié)合起來显熏。

加快 C# 版本的發(fā)布速度

在被稱為“新微軟”的推動(dòng)下,微軟創(chuàng)新的步伐也加快了晒屎。為了做到加快步伐喘蟆,微軟開發(fā)部門將一些過去集成在一起的技術(shù)現(xiàn)在都分離了出來缓升。

Visual Studio、.NET Framework蕴轨、.NET 運(yùn)行時(shí)港谊、編譯器和編譯運(yùn)行時(shí)的運(yùn)行語言都被拆分成自己的包和版本,這意味著以上每一個(gè)都可以按照自己的節(jié)奏發(fā)布了〕热酰現(xiàn)在歧寺,我們已經(jīng)看到了這種模式的成功。.NET Core 2.0 的工作已經(jīng)完成了棘脐,并從 Visual Studio 發(fā)布出來成福,同時(shí)也增加了對(duì) Linux 的支持。幾乎與 .NET Core 2 發(fā)布的同時(shí)荆残,C# 7.1 版本也發(fā)布了奴艾。

C# 7.1 是一個(gè)重要的發(fā)布版本,雖然新功能不多内斯,但它卻是 C# 第7個(gè)大版本的開始蕴潦。C# 7.2 版本的工作已經(jīng)展開了,同時(shí)也在計(jì)劃著 C# 7.3 版本俘闯。盡管 C# 8.0 版本還有點(diǎn)遠(yuǎn)潭苞,但是微軟技術(shù)人員已經(jīng)對(duì) C# 8.0 版本的特性有了一些想法。

語言設(shè)計(jì)的討論是公開的真朗,圍繞 C# 8.0 版本新特性的問題部分也進(jìn)行了廣泛的討論此疹。檢查每個(gè)發(fā)行版本的里程碑,同時(shí)也為未來的 C# 路線圖做好評(píng)估遮婶。

下面正式開始介紹 C# 8.0 版本中值得關(guān)注的三個(gè)新特性蝗碎。

非空和可空的引用類型

C# 有兩大變量類型:基本類型和引用類型。原先的類型是 int旗扑、char 和 double蹦骑。這些類型都不能接受 null 值。在不分配新值的情況下臀防,創(chuàng)建一個(gè)新的 int 值眠菇,會(huì)導(dǎo)致 int 值為 0 而不是 null。C# 2.0 介紹了帶有“袱衷?”符號(hào)的變量原語的可空版本捎废。因此,int致燥?是 int 的一個(gè)版本登疗,它可以接受空值。

另一方面篡悟,引用類型(如字符串這樣的對(duì)象)始終能夠接受 null 值谜叹,并將 null 作為默認(rèn)值。這也帶了來一個(gè)缺點(diǎn)搬葬,就是可能導(dǎo)致應(yīng)用程序中帶入空引用荷腊。

在 C# 8.0 中,將引用類型設(shè)為非空急凰,成為了一個(gè)可選的特性女仰。

為 C# 引入這樣的特性是很困難的,因?yàn)檫@為原本已經(jīng)運(yùn)行很好的代碼抡锈,引入了潛在的編譯錯(cuò)誤疾忍。因此需要做的是,創(chuàng)建此功能的方法床三,而不是為開發(fā)人員帶來無法估量的工作量一罩。

根據(jù)設(shè)計(jì)方案,C# 團(tuán)隊(duì)決定采取一個(gè)允許開發(fā)者可以選擇可空引用類型的方法撇簿。這將是一個(gè)工程級(jí)別的設(shè)定聂渊,以便啟用對(duì)可空引用的驗(yàn)證。一旦啟用四瘫,可接受 null 值的對(duì)象就需要使用汉嗽?運(yùn)算符進(jìn)行聲明。

如下代碼:

String s =null;

Console.Write(s);

這將引起警告找蜜,因?yàn)樽址荒芙邮芸罩当睢R虼诵枰韵麓a:

String? s =null;

Console.Write(s);

然而,上面代碼也會(huì)在Console拋出一個(gè)警告洗做,寫的是不希望收到一個(gè)空字符串弓叛。事實(shí)上,原始代碼可能有錯(cuò)誤诚纸,所以級(jí)聯(lián)警告可以幫助我們避免運(yùn)行時(shí)錯(cuò)誤墩莫。這是最有可能提高代碼質(zhì)量的語言變化。

新的輕量級(jí)類:Records

C# 8.0 的一個(gè)很棒的新特性阎姥,是有一種新方式來創(chuàng)建一個(gè)被稱為 records 的類淑廊。這個(gè)類本質(zhì)上是一個(gè)非常輕量級(jí)的類,是一個(gè)字段集合旧烧,能夠幫助快速創(chuàng)建 POCO 類型的對(duì)象影钉,同時(shí)也可以解決比較對(duì)象是否相等時(shí)的關(guān)鍵問題。

例如掘剪,為銀行帳戶創(chuàng)建 record 類型:

classBankAccount(Guid Id,stringName,decimalBalance)

這是一種創(chuàng)建簡單類的很好的方法平委。

用 records 解決對(duì)象相等問題

在 C# 編程中,一個(gè)最難掌握的內(nèi)容就是夺谁,將==運(yùn)算符用于引用類型和原語之間的區(qū)別廉赔。

為了舉例說明肉微,我們使用==對(duì)比兩個(gè)整數(shù):

intI =1;intj =1;

i== j//yields true

原語的值是相等的。但是蜡塌,對(duì)于引用類型碉纳,卻不相等。

Object I =newObject();

Object j=newObject();

i== j//yields false

這是因?yàn)?C# 的引用類型比較會(huì)考慮引用相等馏艾,也就是說劳曹,只有當(dāng)兩個(gè)對(duì)象是同一個(gè)對(duì)象才相等。records 類型提供了結(jié)構(gòu)上的相等琅摩,等同于相等運(yùn)算符铁孵。創(chuàng)建新 record 的語法非常簡潔,因?yàn)樯傻膶?duì)象是簡單的數(shù)據(jù)傳輸對(duì)象房资。

Records 是一個(gè)輕量級(jí)對(duì)象蜕劝,使用起來非常方便。雖然 Records 不是語言的一個(gè)突破性的變化轰异,但也是一個(gè)漸進(jìn)的改進(jìn)熙宇,值得歡迎。

默認(rèn)接口實(shí)現(xiàn)

版本控制接口可能會(huì)令人懊惱溉浙, 因?yàn)樗蠼涌谏系男路椒▉韺?shí)現(xiàn)接口上的所有對(duì)象烫止。隨著新方法添加到了接口中,實(shí)現(xiàn)它們的任務(wù)就落在了實(shí)現(xiàn)接口的各個(gè)類中戳稽。因?yàn)楦鱾€(gè)實(shí)現(xiàn)不必須共有同一個(gè)父類馆蠕,添加到接口的方法就可以在各自的類中實(shí)現(xiàn)。

默認(rèn)接口實(shí)現(xiàn)允許在接口中指定一個(gè)實(shí)現(xiàn)惊奇,只要它是接口上現(xiàn)有方法的函數(shù)實(shí)現(xiàn)的互躬。下面再以銀行帳戶為例:

publicinterfaceIBankAccountManager{

????voidPerformTransaction(decimalamount,stringreason);

}

現(xiàn)在為了便于使用,我們想在銀行賬戶上提供明確的借方和信譽(yù)功能颂郎。通常我們會(huì)為接口添加這些功能并在所有的類中實(shí)現(xiàn)它們吼渡。

publicinterfaceIBankAccountManager{

????voidPerformTransaction(decimalamount,stringreason);

????voidPerformDebit(decimalamount,stringreason)

????{

????????PerformTransaction(-1*amount, $”Debit: {reason}”);

????}

voidPerformCredit(decimalamount,stringreason){

????PerformTransaction(amount, $”Credit: {reason}”);

????}

}

默認(rèn)接口實(shí)現(xiàn)提供了一種強(qiáng)大的新方法來擴(kuò)展實(shí)現(xiàn)接口的類,而無需重復(fù)代碼乓序。只需遵從默認(rèn)實(shí)現(xiàn)寺酪,許多接口的類的實(shí)現(xiàn)就可以得到大大簡化。

其它的 C# 8.0 新特性

正是因?yàn)檫@些新特性替劈,才讓我們毫不懷疑這就是 C# 8.0寄雀。以下是其它一些 C# 8.0 新特性:

? 提升擴(kuò)展支持 – 這種提升不僅僅可以用于擴(kuò)展方法,它還提供了對(duì)屬性陨献、靜態(tài)方法和更多方面的支持盒犹。

? 異步數(shù)據(jù)流 – 能夠擁有支持異步操作的枚舉值。包括新的 iasyncenumerable 和 iasyncenumerator 接口。

? Async Disposable – iasyncdisposable 允許對(duì)象有一個(gè)異步的處理方法急膀。

結(jié)論

過去幾年中沮协,.NET 的創(chuàng)新速度確實(shí)加快了。雖然 C# 8.0 目前還沒有實(shí)現(xiàn)卓嫂,但是它比起 C# 7.0慷暂,將帶來很多有幫助的提升,讓我們一起期待 C# 8.0 的早日到來命黔。

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

轉(zhuǎn)載請(qǐng)注明出自:葡萄城控件

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末呜呐,一起剝皮案震驚了整個(gè)濱河市就斤,隨后出現(xiàn)的幾起案子悍募,更是在濱河造成了極大的恐慌,老刑警劉巖洋机,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坠宴,死亡現(xiàn)場離奇詭異,居然都是意外死亡绷旗,警方通過查閱死者的電腦和手機(jī)喜鼓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衔肢,“玉大人庄岖,你說我怎么就攤上這事〗侵瑁” “怎么了隅忿?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長邦尊。 經(jīng)常有香客問我背桐,道長,這世上最難降的妖魔是什么蝉揍? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任链峭,我火速辦了婚禮,結(jié)果婚禮上又沾,老公的妹妹穿的比我還像新娘弊仪。我一直安慰自己,他們只是感情好杖刷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布撼短。 她就那樣靜靜地躺著,像睡著了一般挺勿。 火紅的嫁衣襯著肌膚如雪曲横。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天,我揣著相機(jī)與錄音禾嫉,去河邊找鬼灾杰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛熙参,可吹牛的內(nèi)容都是我干的艳吠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼孽椰,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼昭娩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起黍匾,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤栏渺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后锐涯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體磕诊,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年纹腌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了霎终。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡升薯,死狀恐怖莱褒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情涎劈,我是刑警寧澤广凸,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站责语,受9級(jí)特大地震影響炮障,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜坤候,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一胁赢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧白筹,春花似錦智末、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至顽照,卻和暖如春由蘑,著一層夾襖步出監(jiān)牢的瞬間闽寡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來泰國打工尼酿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留爷狈,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓裳擎,卻偏偏與公主長得像涎永,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鹿响,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理羡微,服務(wù)發(fā)現(xiàn),斷路器惶我,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,095評(píng)論 25 707
  • 蘋果官方文檔翻譯 《Objective-C語言編程》(Programming with Objective-C) ...
    fever105閱讀 25,670評(píng)論 19 130
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 10,965評(píng)論 6 13
  • 那天妈倔,一個(gè)人忐忑地跟著師兄師姐一起來到了這里。今天晚上卻是我最后一天睡在宿舍的床上指孤。一直以來启涯,我都知道贬堵,這一天總會(huì)...
    sevenkite閱讀 215評(píng)論 0 0