本文**
注意事項
一些想法
參考文獻
該文章的最新版本已遷移至個人部落格【位元飛】,單擊鏈結 訪問。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
版本,而ienumerable
和ienumerator
還不能方便的使用async
/await
就顯得很麻煩了。
但是,現在引入了非同步流,這些問題得到了解決。
我們通過新的iasyncenumerable
和iasyncenumerator
來實現這一點。同時,由於之前foreach
是基於ienumerable
和ienumerator
實現的,因此引入了新的語法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 = false
且name
為string
的student
,並且迭代返回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 的使用結合...