C# Record關(guān)鍵字示例詳解
在 C# 9.0 中引入了 record
關(guān)鍵字,用于定義記錄類(lèi)型(Record Types)。記錄類(lèi)型是一種輕量級(jí)的數(shù)據(jù)載體,專(zhuān)注于表示數(shù)據(jù),它提供了內(nèi)置的相等性比較、生成屬性和方法等功能,使得編寫(xiě)數(shù)據(jù)類(lèi)更加簡(jiǎn)潔和高效。
基本概念
- 不可變性:記錄類(lèi)型默認(rèn)是不可變的,這意味著它們的屬性是只讀的,不能被修改。
- 相等性:記錄類(lèi)型根據(jù)其值進(jìn)行相等比較,而不是引用比較。
- 自動(dòng)化成員:記錄類(lèi)型可以自動(dòng)生成構(gòu)造函數(shù)、屬性、
ToString
、Equals
和GetHashCode
方法。
聲明記錄類(lèi)型
記錄類(lèi)型的聲明非常簡(jiǎn)潔,基本語(yǔ)法如下:
public record Person(string FirstName, string LastName, int Age);
這會(huì)生成一個(gè)包含 FirstName
、LastName
和 Age
屬性的記錄類(lèi)型,并自動(dòng)提供構(gòu)造函數(shù)、ToString
、Equals
和 GetHashCode
方法。
不可變性和可變性
不可變記錄:默認(rèn)情況下,記錄類(lèi)型是不可變的,屬性是只讀的。例如:
public record Person(string FirstName, string LastName, int Age);
可變記錄:可以通過(guò)在記錄類(lèi)型后添加 with
關(guān)鍵字來(lái)創(chuàng)建可變記錄,允許修改屬性。例如:
public record Person(string FirstName, string LastName, int Age) with;
構(gòu)造函數(shù)和初始化
記錄類(lèi)型自動(dòng)生成構(gòu)造函數(shù),可以直接通過(guò)屬性初始化:
var person = new Person("John", "Doe", 30);
相等性比較
記錄類(lèi)型根據(jù)值進(jìn)行相等比較:
var person1 = new Person("John", "Doe", 30); var person2 = new Person("John", "Doe", 30); Console.WriteLine(person1 == person2); // 輸出: True
自定義方法和成員
可以在記錄類(lèi)型中添加自定義方法和成員:
public record Person(string FirstName, string LastName, int Age) { public string FullName => $"{FirstName} {LastName}"; }
屬性訪問(wèn)器
默認(rèn)情況下,記錄類(lèi)型的屬性是只讀的。如果需要自定義屬性行為,可以顯式定義屬性:
public record Person { public string FirstName { get; init; } public string LastName { get; init; } public int Age { get; init; } }
使用 init
訪問(wèn)器可以在初始化對(duì)象時(shí)設(shè)置值,但之后不能修改。
繼承和派生
記錄類(lèi)型可以繼承其他記錄類(lèi)型,派生記錄類(lèi)型會(huì)繼承基記錄類(lèi)型的屬性和方法。
public record Person(string FirstName, string LastName, int Age); public record Employee(string FirstName, string LastName, int Age, string EmployeeId) : Person(FirstName, LastName, Age);
使用場(chǎng)景
- 數(shù)據(jù)傳輸對(duì)象(DTO):記錄類(lèi)型非常適合用來(lái)表示數(shù)據(jù)傳輸對(duì)象,因?yàn)樗鼈儗?zhuān)注于數(shù)據(jù)的表示和傳輸。
- 不可變數(shù)據(jù)結(jié)構(gòu):在需要不可變數(shù)據(jù)的情況下,記錄類(lèi)型提供了方便的不可變性支持。
- 配置對(duì)象:記錄類(lèi)型可以用來(lái)表示應(yīng)用程序的配置選項(xiàng),因?yàn)樗鼈円子趧?chuàng)建和比較。
示例代碼
public record Person(string FirstName, string LastName, int Age) { public string FullName => $"{FirstName} {LastName}"; } class Program { static void Main() { var person1 = new Person("John", "Doe", 30); var person2 = new Person("John", "Doe", 30); var person3 = new Person("Jane", "Doe", 25); Console.WriteLine(person1 == person2); // True Console.WriteLine(person1 == person3); // False Console.WriteLine(person1.FullName); // John Doe } }
到此這篇關(guān)于C# Record關(guān)鍵字的文章就介紹到這了,更多相關(guān)C# Record關(guān)鍵字內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
c# 編寫(xiě)一個(gè)輕量級(jí)的異步寫(xiě)日志的實(shí)用工具類(lèi)(LogAsyncWriter)
這篇文章主要介紹了c# 如何編寫(xiě)一個(gè)輕量級(jí)的異步寫(xiě)日志的實(shí)用工具類(lèi)(LogAsyncWriter),幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-03-03c#使用Unity粒子實(shí)現(xiàn)炮塔發(fā)射系統(tǒng)
Unity自帶粒子發(fā)射器、動(dòng)畫(huà)器、渲染器各兩種,利用Unity的粒子系統(tǒng)制作一個(gè)炮塔發(fā)射系統(tǒng),了解粒子系統(tǒng),必須先了解每一個(gè)屬性都代表了什么,之后才能根據(jù)這些原理來(lái)調(diào)整出自己滿意的效果2022-04-04C#使用AutoUpdater.NET實(shí)現(xiàn)程序自動(dòng)更新
開(kāi)發(fā)桌面應(yīng)用程序的時(shí)候,經(jīng)常會(huì)因?yàn)樾略龉δ苄枨蠡蛐迯?fù)已知問(wèn)題,要求客戶更新應(yīng)用程序,在.Net體系中采用?AutoUpdater.NET?組件可以非常便捷的實(shí)現(xiàn)這一功能,需要的朋友可以參考下2024-02-02c# 如何自己實(shí)現(xiàn)一個(gè)ORM框架
這篇文章主要介紹了c# 如何自己實(shí)現(xiàn)一個(gè)ORM,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-03-03C#中Json字符串的各種應(yīng)用類(lèi)實(shí)例講解
這篇文章主要介紹了C#中Json字符串的各種應(yīng)用類(lèi)實(shí)例講解的相關(guān)資料,需要的朋友可以參考下2015-10-10C#實(shí)現(xiàn)在啟動(dòng)目錄創(chuàng)建快捷方式的方法
這篇文章主要介紹了C#實(shí)現(xiàn)在啟動(dòng)目錄創(chuàng)建快捷方式的方法,涉及C#快捷方式的創(chuàng)建技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09C# 使用 WebBrowser 實(shí)現(xiàn) HTML 轉(zhuǎn)圖片功能的示例代碼
這篇文章主要介紹了C# 如何使用 WebBrowser 實(shí)現(xiàn) HTML 轉(zhuǎn)圖片功能,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07C# 正則表達(dá)式常用的符號(hào)和模式解析(最新推薦)
這篇文章主要介紹了C# 正則表達(dá)式常用的符號(hào)和模式解析,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12C#中通過(guò)API實(shí)現(xiàn)的打印類(lèi) 實(shí)例代碼
這篇文章介紹了,C#中通過(guò)API實(shí)現(xiàn)的打印類(lèi) 實(shí)例代碼,有需要的朋友可以參考一下2013-08-08