.NET 6新特性试用 | record struct
生活随笔
收集整理的這篇文章主要介紹了
.NET 6新特性试用 | record struct
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
在以前的文章中,我們介紹過record類型,它具有不變性(《為什么應該用record來定義DTO》)和值相等性(《為什么應該用record來定義DTO(續)》)。
record是引用類型。而在.NET 6中,我們可以使用record struct定義值類型。
Demo
1.不變性
定義record structure的代碼非常簡單,如下所示:
public?record?struct?User(int?Id,?string?Name);但是,需要注意的是,和record不一樣,record struct生成的類型是不具備不變性的:
通過反編譯可以看到,最后生成的其實就是結構(struct)類型,而且每個屬性都有set方法:
如果要讓類型具有不變性,需要在定義時設置readonly關鍵字:
public?readonly?record?struct?User(int?Id,?string?Name);與record一樣,同樣可以用with表達式修改指定屬性創建對象的副本:
2.值相等性
因為record struct實際是一個結構類型,而結構是一種值類型,所以可以使用Equals方法進行值比較,具有有相同值的兩個結構將返回true:
public?struct?User {public?int?Id;public?string?Name; }但是,普通的結構沒有實現==和!=運算符,所以不能用這些運算符比較兩個結構。但是,可以在record struct上使用這些運算符進行比較:
結論
為了便于區分,可以分別用record class和record struct進行定義:
public?record?class?UserClass(int?Id,?string?Name); public?record?struct?UserStruct(int?Id,?string?Name);如果你覺得這篇文章對你有所啟發,請關注我的個人公眾號”My IO“
總結
以上是生活随笔為你收集整理的.NET 6新特性试用 | record struct的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OAuth 2.0 扩展协议之 PKCE
- 下一篇: WPF 模仿IconPacks库写图标按