前言
本來將介紹 C# 9.0 中的 record 及加強的 pattern matching 的功能。
在 C# 中,如果想要建立 Immutable Class 需要在屬性那設定 {get; init;} ,例如,
1 | public class DrinkBase |
record
record 也是 class ,只是它讓我們可以快速定義 Immutable Class,所以上面就可以改成以下的方式,
1 |
|
因為它也是 Class ,所以也可以有繼承,如下,
1 |
|
所以建立它們後,就不允許修改它們的屬性,如下,
1 |
|
With-expressions
如果想要從一個現有的 record 物件 Copy 它的屬性,並改一些屬性值,就可以透過 with 的方式,例如,
1 |
|
Value-based equality
而 record 的物件比較是透過屬性 Value 來比較的,所以如果2個物件,都是相同的 record Type ,而且屬性也都相同,所以比較出來會為 true,如下,
1 |
|
如果要建立 Method ,也是可以的,如下,
1 |
|
Positional records
如果想要快速地將 record 物件指定給變數的話,可以使用 positional deconstruction ,如下,
1 |
|
Improved pattern matching
針對 switch case ,也可以作一些簡化,例如一個計算價格的 Method ,預設如下,
1 |
|
可以簡化成以下的方式,
1 |
|
測試如下,
1 |
|
所以可以善用這種方式來讓程式碼可讀性更高,更簡潔。