.NET 6新特性试用 | record struct
前言
在以前的文章中,我們介紹過record類型,它具有不變性(《為什么應(yīng)該用record來定義DTO》)和值相等性(《為什么應(yīng)該用record來定義DTO(續(xù))》)。
record是引用類型。而在.NET 6中,我們可以使用record struct定義值類型。
Demo
1.不變性
定義record structure的代碼非常簡單,如下所示:
public?record?struct?User(int?Id,?string?Name);但是,需要注意的是,和record不一樣,record struct生成的類型是不具備不變性的:
通過反編譯可以看到,最后生成的其實(shí)就是結(jié)構(gòu)(struct)類型,而且每個(gè)屬性都有set方法:
如果要讓類型具有不變性,需要在定義時(shí)設(shè)置readonly關(guān)鍵字:
public?readonly?record?struct?User(int?Id,?string?Name);與record一樣,同樣可以用with表達(dá)式修改指定屬性創(chuàng)建對(duì)象的副本:
2.值相等性
因?yàn)閞ecord struct實(shí)際是一個(gè)結(jié)構(gòu)類型,而結(jié)構(gòu)是一種值類型,所以可以使用Equals方法進(jìn)行值比較,具有有相同值的兩個(gè)結(jié)構(gòu)將返回true:
public?struct?User {public?int?Id;public?string?Name; }但是,普通的結(jié)構(gòu)沒有實(shí)現(xiàn)==和!=運(yùn)算符,所以不能用這些運(yùn)算符比較兩個(gè)結(jié)構(gòu)。但是,可以在record struct上使用這些運(yùn)算符進(jìn)行比較:
結(jié)論
為了便于區(qū)分,可以分別用record class和record struct進(jìn)行定義:
public?record?class?UserClass(int?Id,?string?Name); public?record?struct?UserStruct(int?Id,?string?Name);如果你覺得這篇文章對(duì)你有所啟發(fā),請(qǐng)關(guān)注我的個(gè)人公眾號(hào)”My IO“
總結(jié)
以上是生活随笔為你收集整理的.NET 6新特性试用 | record struct的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OAuth 2.0 扩展协议之 PKCE
- 下一篇: C# WPF MVVM模式Prism框架