C 8 0 的新特性概覽和講解

2021-09-01 03:08:22 字數 3517 閱讀 1828

本文**

注意事項

一些想法

參考文獻

該文章的最新版本已遷移至個人部落格【位元飛】,單擊鏈結 訪問。

2023年11月12日微軟在 msdn 部落格的 building c# 8.01 一文發表了新的 c# 8.0 即將發布的特性,現在讓我們來看一下。

可空引用型別

非同步流範圍和下標型別

介面成員的預設實現

模式匹配表示式和遞迴模式語句

目標型別推導

從此,引用型別將會區分是否可分,可以從根源上解決 nullreferenceexception。但是由於這個特性會打破相容性,因此沒有當作 error 來對待,而是使用 warning 折衷,而且開發人員需要手動 opt-in 才可以使用該特性(可以在專案層級或者檔案層級進行設定)。

例如:

string s =

null

;// 產生警告: 對不可空引用型別賦值 null

string

? s =

null

;// ok

voidm(

string

? s)

}

至此,媽媽再也不用擔心我的程式到處報 nullreferenceexception 啦!

考慮到大部分 api 以及函式實現都有了對應的async版本,而ienumerableienumerator還不能方便的使用async/await就顯得很麻煩了。

但是,現在引入了非同步流,這些問題得到了解決。

我們通過新的iasyncenumerableiasyncenumerator來實現這一點。同時,由於之前foreach是基於ienumerableienumerator實現的,因此引入了新的語法await foreach來擴充套件foreach的適用性。

例如:

async task<

int>

getbigresultasync()

async iasyncenumerable<

int>

getbigresultsasync()

}

c# 8.0 引入了 index 型別,可用作陣列下標,並且使用 ^ 操作符表示倒數。

不過要注意的是,倒數是從 1 開始的。

index i1 =3;

// 下標為 3

index i2 =^4

;// 倒數第 4 個元素

int[

] a =

;console.

writeline

($", ");

// "3, 6"123123

除此之外,還引入了 「…」 操作符用來表示範圍(注意是左閉右開區間)。

var slice = a[i1.

.i2]

;//

關於這個下標從 0 開始,倒數從 1 開始,範圍左閉右開,筆者剛開始覺得很奇怪,但是發現 python 等語言早已經做了這樣的實踐,並且效果不錯。因此這次微軟也採用了這種方式設計了 c# 8.0 的這個語法。

從此介面中可以包含實現了:

inte***ce

ilogger

class

consolelogger

:ilogger

// log(exception) 會得到執行的預設實現

}

在上面的例子中,log(exception)將會得到執行的預設實現。

現在可以這麼寫了(patterns 裡可以包含 patterns)

ienumerable<

string

>

getenrollees()

)yield

return name;

}}

student檢查 p 是否為graduated = falsenamestringstudent,並且迭代返回name

可以這樣寫之後是不是很爽?

更有:

var area = figure switch

;

典型的模式匹配語句,只不過沒有用「match」關鍵字,而是沿用了

了「switch」關鍵字。

但是不得不說,乙個字,爽!

以前我們寫下面這種變數/成員宣告的時候,大概最簡單的寫法就是:

var points =

new;

private list<

int> _mylist =

newlist

<

int>()

;1212

現在我們可以這麼寫啦:

point[

] ps =

;private list<

int> _mylist =

new();

1212

是不是更加的舒服了?

該文章的最新版本已遷移至個人部落格【位元飛】,單擊鏈結 訪問。

以上的新特性需要 .net standard 2.1/.net core 3.0/.net framework 4.8 及以上來支援。

但是,由於介面的預設實現方法這個特性需要 clr 的支援,而 .net framework 4.8 還沒有來得及做出修改,因此此特性在 .net framework 4.8 中不可用,需要等待進一步的更新。

c# 8.0 截至發文可以說已經定型了,正式發布還需要等一陣子。

本次 c# 8.0 的更新,record2估計是要被鴿了,有些小遺憾。

c# 一直都在不斷地完善和補充自己的語法體系,這和官方給出的 c# 發展目標相同,即:不斷容納各種優秀和現代的語法特性,追求多樣化。相信這門優秀的語言未來會帶給我們更多的驚喜。希望大家不要抱著老舊的看法對待這門語言,都 8012 年了我們也應該用全新的姿態去審視這門語言,去嘗試一下新的語法對編碼效率帶來的大幅度提公升。

c# 的 ide 除了 visusl studio 之外,還有 visual studio for mac 以及跨平台的 visual studio code、jetbrain 出品的 rider 跨平台 c# ide,極大程度的方便了開發者。

從近幾年的發展來看,微軟面對開源、生態建設、開發者、社群、跨平台等的重視程度不斷上公升,相信 .net core 的前景一定會更好。

↩︎↩︎

C 8 0新特性介紹

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

C 8 0的三個值得關注的新特性

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

C 8 0的三個值得關注的新特性

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