C# Record關鍵字示例詳解
在 C# 9.0 中引入了 record
關鍵字,用于定義記錄類型(Record Types)。記錄類型是一種輕量級的數(shù)據(jù)載體,專注于表示數(shù)據(jù),它提供了內置的相等性比較、生成屬性和方法等功能,使得編寫數(shù)據(jù)類更加簡潔和高效。
基本概念
- 不可變性:記錄類型默認是不可變的,這意味著它們的屬性是只讀的,不能被修改。
- 相等性:記錄類型根據(jù)其值進行相等比較,而不是引用比較。
- 自動化成員:記錄類型可以自動生成構造函數(shù)、屬性、
ToString
、Equals
和GetHashCode
方法。
聲明記錄類型
記錄類型的聲明非常簡潔,基本語法如下:
public record Person(string FirstName, string LastName, int Age);
這會生成一個包含 FirstName
、LastName
和 Age
屬性的記錄類型,并自動提供構造函數(shù)、ToString
、Equals
和 GetHashCode
方法。
不可變性和可變性
不可變記錄:默認情況下,記錄類型是不可變的,屬性是只讀的。例如:
public record Person(string FirstName, string LastName, int Age);
可變記錄:可以通過在記錄類型后添加 with
關鍵字來創(chuàng)建可變記錄,允許修改屬性。例如:
public record Person(string FirstName, string LastName, int Age) with;
構造函數(shù)和初始化
記錄類型自動生成構造函數(shù),可以直接通過屬性初始化:
var person = new Person("John", "Doe", 30);
相等性比較
記錄類型根據(jù)值進行相等比較:
var person1 = new Person("John", "Doe", 30); var person2 = new Person("John", "Doe", 30); Console.WriteLine(person1 == person2); // 輸出: True
自定義方法和成員
可以在記錄類型中添加自定義方法和成員:
public record Person(string FirstName, string LastName, int Age) { public string FullName => $"{FirstName} {LastName}"; }
屬性訪問器
默認情況下,記錄類型的屬性是只讀的。如果需要自定義屬性行為,可以顯式定義屬性:
public record Person { public string FirstName { get; init; } public string LastName { get; init; } public int Age { get; init; } }
使用 init
訪問器可以在初始化對象時設置值,但之后不能修改。
繼承和派生
記錄類型可以繼承其他記錄類型,派生記錄類型會繼承基記錄類型的屬性和方法。
public record Person(string FirstName, string LastName, int Age); public record Employee(string FirstName, string LastName, int Age, string EmployeeId) : Person(FirstName, LastName, Age);
使用場景
- 數(shù)據(jù)傳輸對象(DTO):記錄類型非常適合用來表示數(shù)據(jù)傳輸對象,因為它們專注于數(shù)據(jù)的表示和傳輸。
- 不可變數(shù)據(jù)結構:在需要不可變數(shù)據(jù)的情況下,記錄類型提供了方便的不可變性支持。
- 配置對象:記錄類型可以用來表示應用程序的配置選項,因為它們易于創(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 } }
到此這篇關于C# Record關鍵字的文章就介紹到這了,更多相關C# Record關鍵字內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
c# 編寫一個輕量級的異步寫日志的實用工具類(LogAsyncWriter)
這篇文章主要介紹了c# 如何編寫一個輕量級的異步寫日志的實用工具類(LogAsyncWriter),幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下2021-03-03c#使用Unity粒子實現(xiàn)炮塔發(fā)射系統(tǒng)
Unity自帶粒子發(fā)射器、動畫器、渲染器各兩種,利用Unity的粒子系統(tǒng)制作一個炮塔發(fā)射系統(tǒng),了解粒子系統(tǒng),必須先了解每一個屬性都代表了什么,之后才能根據(jù)這些原理來調整出自己滿意的效果2022-04-04C#使用AutoUpdater.NET實現(xiàn)程序自動更新
開發(fā)桌面應用程序的時候,經常會因為新增功能需求或修復已知問題,要求客戶更新應用程序,在.Net體系中采用?AutoUpdater.NET?組件可以非常便捷的實現(xiàn)這一功能,需要的朋友可以參考下2024-02-02C#實現(xiàn)在啟動目錄創(chuàng)建快捷方式的方法
這篇文章主要介紹了C#實現(xiàn)在啟動目錄創(chuàng)建快捷方式的方法,涉及C#快捷方式的創(chuàng)建技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-09-09C# 使用 WebBrowser 實現(xiàn) HTML 轉圖片功能的示例代碼
這篇文章主要介紹了C# 如何使用 WebBrowser 實現(xiàn) HTML 轉圖片功能,文中示例代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下2020-07-07