欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C# Record關(guān)鍵字示例詳解

 更新時(shí)間:2025年01月03日 09:52:28   作者:ou.cs  
C#9.0引入record關(guān)鍵字,用于定義不可變且專(zhuān)注于數(shù)據(jù)表示的記錄類(lèi)型,記錄類(lèi)型自動(dòng)生成構(gòu)造函數(shù)、ToString、Equals和GetHashCode方法,并支持不可變性和可變性,適用于數(shù)據(jù)傳輸對(duì)象、不可變數(shù)據(jù)結(jié)構(gòu)和配置對(duì)象等場(chǎng)景,本文介紹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、EqualsGetHashCode 方法。

聲明記錄類(lèi)型

記錄類(lèi)型的聲明非常簡(jiǎn)潔,基本語(yǔ)法如下:

public record Person(string FirstName, string LastName, int Age);

這會(huì)生成一個(gè)包含 FirstNameLastNameAge 屬性的記錄類(lèi)型,并自動(dòng)提供構(gòu)造函數(shù)、ToString、EqualsGetHashCode 方法。

不可變性和可變性

不可變記錄:默認(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)文章

最新評(píng)論