最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2025年01月03日 09:52:28   作者:ou.cs  
C#9.0引入record關(guān)鍵字,用于定義不可變且專注于數(shù)據(jù)表示的記錄類型,記錄類型自動(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)鍵字,用于定義記錄類型(Record Types)。記錄類型是一種輕量級(jí)的數(shù)據(jù)載體,專注于表示數(shù)據(jù),它提供了內(nèi)置的相等性比較、生成屬性和方法等功能,使得編寫數(shù)據(jù)類更加簡(jiǎn)潔和高效。

基本概念

  • 不可變性:記錄類型默認(rèn)是不可變的,這意味著它們的屬性是只讀的,不能被修改。
  • 相等性:記錄類型根據(jù)其值進(jìn)行相等比較,而不是引用比較。
  • 自動(dòng)化成員:記錄類型可以自動(dòng)生成構(gòu)造函數(shù)、屬性、ToString、EqualsGetHashCode 方法。

聲明記錄類型

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

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

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

不可變性和可變性

不可變記錄:默認(rèn)情況下,記錄類型是不可變的,屬性是只讀的。例如:

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

可變記錄:可以通過(guò)在記錄類型后添加 with 關(guān)鍵字來(lái)創(chuàng)建可變記錄,允許修改屬性。例如:

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

構(gòu)造函數(shù)和初始化

記錄類型自動(dòng)生成構(gòu)造函數(shù),可以直接通過(guò)屬性初始化:

var person = new Person("John", "Doe", 30);

相等性比較

記錄類型根據(jù)值進(jìn)行相等比較:

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}";
}

屬性訪問(wèn)器

默認(rèn)情況下,記錄類型的屬性是只讀的。如果需要自定義屬性行為,可以顯式定義屬性:

public record Person
{
    public string FirstName { get; init; }
    public string LastName { get; init; }
    public int Age { get; init; }
}

使用 init 訪問(wèn)器可以在初始化對(duì)象時(shí)設(shè)置值,但之后不能修改。

繼承和派生

記錄類型可以繼承其他記錄類型,派生記錄類型會(huì)繼承基記錄類型的屬性和方法。

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)表示數(shù)據(jù)傳輸對(duì)象,因?yàn)樗鼈儗W⒂跀?shù)據(jù)的表示和傳輸。
  • 不可變數(shù)據(jù)結(jié)構(gòu):在需要不可變數(shù)據(jù)的情況下,記錄類型提供了方便的不可變性支持。
  • 配置對(duì)象:記錄類型可以用來(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# 數(shù)據(jù)類型占用的字節(jié)數(shù)介紹

    c# 數(shù)據(jù)類型占用的字節(jié)數(shù)介紹

    本篇文章主要是對(duì)c#中數(shù)據(jù)類型占用的字節(jié)數(shù)進(jìn)行了詳細(xì)的介紹。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2014-01-01
  • 一個(gè)狀態(tài)機(jī)的實(shí)現(xiàn)

    一個(gè)狀態(tài)機(jī)的實(shí)現(xiàn)

    本文主要介紹了C#實(shí)現(xiàn)一個(gè)狀態(tài)機(jī)的思路與方法,具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • C#的靜態(tài)工廠方法與構(gòu)造函數(shù)相比有哪些優(yōu)缺點(diǎn)

    C#的靜態(tài)工廠方法與構(gòu)造函數(shù)相比有哪些優(yōu)缺點(diǎn)

    這篇文章主要介紹了C#的靜態(tài)工廠方法與構(gòu)造函數(shù)對(duì)比的優(yōu)缺點(diǎn),文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C#使用CefSharp實(shí)現(xiàn)內(nèi)嵌網(wǎng)頁(yè)詳解

    C#使用CefSharp實(shí)現(xiàn)內(nèi)嵌網(wǎng)頁(yè)詳解

    這篇文章主要介紹了C# WPF里怎么使用CefSharp嵌入一個(gè)網(wǎng)頁(yè),并給出一個(gè)簡(jiǎn)單示例演示C#和網(wǎng)頁(yè)(JS)的交互實(shí)現(xiàn),感興趣的小伙伴可以了解一下
    2023-04-04
  • Unity快速生成常用文件夾的方法

    Unity快速生成常用文件夾的方法

    這篇文章主要介紹了Unity快速生成常用文件夾的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • C#郵件發(fā)送與附件處理過(guò)程詳解

    C#郵件發(fā)送與附件處理過(guò)程詳解

    文章介紹了郵件發(fā)送的基本概念、SMTP協(xié)議、常見(jiàn)SMTP服務(wù)器配置、C#郵件發(fā)送的核心類庫(kù)和實(shí)現(xiàn)步驟,通過(guò)實(shí)例分析,展示了如何封裝郵件發(fā)送工具類以及在實(shí)際業(yè)務(wù)中的應(yīng)用,需要的朋友可以參考下
    2026-01-01
  • C#利用iTextSharp添加PDF水印

    C#利用iTextSharp添加PDF水印

    這篇文章主要為大家詳細(xì)介紹了C#利用iTextSharp添加PDF水印的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • C#中自定義事件和委托實(shí)例

    C#中自定義事件和委托實(shí)例

    這篇文章主要介紹了C#中自定義事件和委托實(shí)例的,本文先是闡述了事件的原理,然后講解了事件和委托的步驟,并給出了實(shí)例代碼,需要的朋友可以參考下
    2015-01-01
  • C#程序調(diào)用C++動(dòng)態(tài)庫(kù)(dll文件)遇到的坑及解決

    C#程序調(diào)用C++動(dòng)態(tài)庫(kù)(dll文件)遇到的坑及解決

    這篇文章主要介紹了C#程序調(diào)用C++動(dòng)態(tài)庫(kù)(dll文件)遇到的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C# 利用AForge實(shí)現(xiàn)攝像頭信息采集

    C# 利用AForge實(shí)現(xiàn)攝像頭信息采集

    這篇文章主要介紹了C# 如何利用AForge實(shí)現(xiàn)攝像頭信息采集,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07

最新評(píng)論

高州市| 维西| 伊通| 吴川市| 友谊县| 泗水县| 阿克陶县| 砀山县| 普格县| 岳普湖县| 台南县| 邯郸市| 阜阳市| 依兰县| 江山市| 宁蒗| 三门峡市| 且末县| 沂源县| 临邑县| 东辽县| 苗栗县| 泰州市| 鄢陵县| 临武县| 张掖市| 清丰县| 旬邑县| 达日县| 朝阳县| 集安市| 建阳市| 连江县| 志丹县| 阳春市| 石城县| 商河县| 谷城县| 紫云| 安图县| 论坛|