C# 9.0

C# 9.0

隨著.NET 5.0的到來,微軟更新了C#的版本9.0,這邊簡單介紹一下C#9.0的內容,也讓自己在寫文章的同時熟悉過一次這些微軟所提供的新功能。


1. 記錄類型(record type)

record是種新的參考類型(reference type),同樣為參考類型的還有class、struct,record專門用來使用在不會經常改變、不必經常裝箱(boxing)的資料,值得注意的是,若new了兩次完全相同的class,==會是false;但若是使用record,==會return true。如下方程式碼所示

C# 9.0

 

2. 僅供初始化的 Setter

9.0新增了init的存取子(Setter),使得值只能在初始化時候填入,如下方程式碼所示

 

C# 9.0 C# 9.0

 

3. 最上層陳述式

這是一個方便平常寫小工具時的功能,現在如果只是想寫一行”Hello World!”,其他行都可以不必寫,cs檔案裡面真的只需要寫一行System.Console.WriteLine(“Hello World!”);,但要注意的是一個專案裡面,只能有一個檔案使用最上層陳述式,否則會報錯誤,且使用最上層陳述式在專案可能會讓其他人感到混亂,所以最好還是在自己使用的小工具或是教學範本裡使用就好。

 

C# 9.0

 

 

4. 模式比對增強功能

可以用邏輯運算符號互相結合,有and、or、not,以前的if not null可能只能這樣寫

if (!(e is null)) { … }
但是現在可以改成這樣
if (e is not null) { … }

 

5. with表達式

這個9.0新增的表達式只能在前面1.提到的record紀錄類型中使用,在以前要建立新的物件要如何達成?必須重新new就算跟以前的物件完全相同,但現在配合新的with表達式即可清楚簡單的建立新物件,跟record型態更是搭配,以下拿1.的範例稍作修改,現在我們需要建立一個triStudentRecord但只有Name需要更改,這時候就是用with的好時機,如下方程式碼所示

C# 9.0

 

6. 省略 new 運算式中的型別

在9.0如果要new的時候,已經宣告了明確的類型,則可以直接使用new 不需要後面打一次型別,如下方程式碼所示

C# 9.0

 

結論:

每次隨著.NET版本的更新,微軟都會一起更新C#的版本,.NET新的功能固然吸引人,但C#的更新內容也是很重要,每次更新後最好都讀過一輪的更新內容,否則哪天維護新的專案時。發現看不懂的新寫法;又或著自己需要開新專案時,也可以直接使用這些新功能為你帶來一些方便,何嘗不是種好事呢!

還有一些未提到的新功能,詳細更新內容請觀看微軟C#9.0官方文件: https://docs.microsoft.com/zh-tw/dotnet/csharp/whats-new/csharp-9

 

參考來源:

  1. https://stackoverflow.com/questions/64816714/when-to-use-record-vs-class-vs-struct
  2. https://www.c-sharpcorner.com/article/using-records-in-c-sharp-9-0/
  3. https://docs.microsoft.com/zh-tw/dotnet/csharp/whats-new/csharp-9
  4. https://docs.microsoft.com/zh-tw/dotnet/csharp/tutorials/exploration/records

Comments

No comments yet. Why don’t you start the discussion?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料