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

C#中使用?record?的好處和最佳場景

 更新時間:2024年07月30日 10:01:27   作者:萬雅虎  
這篇文章主要介紹了C#中使用?record?的好處,使用?record?類型的主要好處包括簡潔的語法、自動生成的成員、基于值的相等性、非破壞性復(fù)制、解構(gòu)支持、繼承支持和與模式匹配的良好集成,需要的朋友可以參考下

一晃距C# 9發(fā)布已經(jīng)4年了,對于record關(guān)鍵字想必大家都不陌生了,不過呢發(fā)現(xiàn)還是有很多同學(xué)不屑于使用這個語法糖,確實(shí),本質(zhì)上 record 就是 class 的封裝,能用 record 書寫的類,那100%都是可以自己手?jǐn)]出來的,但是呢有沒有考慮 別人可能一分鐘寫好的代碼你可能會需要數(shù)分鐘才能完成.因此為了能有更多時間摸魚,強(qiáng)烈推薦不屑一顧的同學(xué)也能用起來!

下面我簡略聊一聊 record 的好處和最佳場景:

  • 簡化語法

我們只需要一行代碼就可以定義完成,這個是最直觀節(jié)省編碼的方式,我們不需要編寫一堆枯燥的get;set; 也不需要編寫構(gòu)造函數(shù)等樣板代碼:

public record Person(string FirstName, string LastName);

那么有同學(xué)會有疑問,如果Person有很多的屬性咋整,不就意味著主構(gòu)造函數(shù)會很冗長,其實(shí)呢,這個和封裝傳參的方式是一樣的,我們可以把同質(zhì)的屬性封裝成其他的record或者class,比如:

public record ExtraInfomation(string Address,string Email,int Age);
public record Person(string FirstName, string LastName, ExtraInfomation ExtraInfo);
  • 自動生成一些對我們有用的成員函數(shù).
  • 構(gòu)造函數(shù):根據(jù)定義的屬性自動生成構(gòu)造函數(shù)。
  • 屬性:自動生成只讀屬性。
  • Deconstruct 方法:用于解構(gòu)記錄對象,對于習(xí)慣寫TS的小伙伴相當(dāng)友好。
  • Equals 和 GetHashCode 方法:基于屬性值的相等性比較。
  • ToString 方法:提供友好的字符串表示,對于調(diào)試輸出特別友好。
  • 基于值的相等性語法.

我們很多時候有這種需求就是比較一個類的所有屬性來判斷邏輯.如果使用 record 的話 我們只需要==或者Equals就能判斷,

  • 非破壞性復(fù)制值

對于一個 class 的淺表復(fù)制,我們可能需要實(shí)現(xiàn)ICloneable,亦或者 new 一個對象逐個屬性賦值,當(dāng)然還有其他的方法,但是呢肯定是沒有 record 來的這么簡單直接.我們僅需要一個with關(guān)鍵字就干完了

public record Person(string FirstName, string LastName, int Age);
var person1 = new Person("vip", "wan", 18);
var person2 = person1 with { Age = 30 };
Console.WriteLine(person1); // 輸出: Person { FirstName = vip, LastName = wan, Age = 18 }
Console.WriteLine(person2); // 輸出: Person { FirstName = vip, LastName = wan, Age = 30 }
  • 解構(gòu)的支持

record 類型自動生成 Deconstruct 方法,允許你輕松地解構(gòu) record 對象,對于全棧的同學(xué)書寫就是手到擒來!

var person = new Person("vip", "wan", 18);
var (firstName, lastName, age) = person;
Console.WriteLine(firstName); // 輸出: vip
Console.WriteLine(lastName);  // 輸出: wan
Console.WriteLine(age);       // 輸出: 18
  • 結(jié)合模式匹配

record 類型與模式匹配功能很好地集成在一起,使得在模式匹配中使用 record 對象更加方便。

public record Person(string UserName, int Age);
public string GetPersonInfo(Person person) => person switch
{
    { Age: < 18 } => "Minor",
    { Age: >= 18 } => "Adult",
    _ => "Unknown"
};
  • 填充既有類

嗯當(dāng)前 C# 語言是真的突飛猛進(jìn),年底就要發(fā)布C# 13了,小伙伴們都直呼學(xué)不動了!,當(dāng)然也有同學(xué)肯定也嘗鮮了主構(gòu)造函數(shù)了吧, 如果想要對主構(gòu)造函數(shù)進(jìn)一步了解可以 點(diǎn)擊鏈接 對于注入的服務(wù)又能少擼不少的代碼!

那么既然 class 都有了主構(gòu)造函數(shù),是不是意味著 record 就失去意義了呢?!,嗯?!你忘了上面的那些糖的甜度了嗎?

因此我們?nèi)绻枰獙扔械?class 支持到 record 的特性我們只需要在class前加上 record 即可.

public record class User {
  public string UserName{ get; set;}
  public int Age { get; set;}
}
var user1 = new User { UserName = "vipwan" , Age = 18};
var user2 = user1 with { };
var user3 = user1 with { Age = 30 };
user1 == user2 // true;
user3.ToString() // "User { Name = vipwan, Age = 30 }"

總結(jié)

使用 record 類型的主要好處包括簡潔的語法、自動生成的成員、基于值的相等性、非破壞性復(fù)制、解構(gòu)支持、繼承支持和與模式匹配的良好集成。這些特性使得 record 類型非常適合用于不可變數(shù)據(jù)對象(DTO,VO等),提高了代碼的可讀性、可維護(hù)性開發(fā)效率。

到此這篇關(guān)于C#中使用 record 的好處的文章就介紹到這了,更多相關(guān)C#使用 record內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • WPF拖動DataGrid滾動條時內(nèi)容混亂的解決方法

    WPF拖動DataGrid滾動條時內(nèi)容混亂的解決方法

    這篇文章主要介紹了WPF拖動DataGrid滾動條時內(nèi)容混亂的解決方法
    2016-10-10
  • C#特性 匿名類型與隱式類型局部變量使用介紹

    C#特性 匿名類型與隱式類型局部變量使用介紹

    這篇文章主要介紹了C#特性-匿名類型與隱式類型局部變量,需要的朋友可以參考下
    2014-12-12
  • C#用鏈?zhǔn)椒椒ū磉_(dá)循環(huán)嵌套

    C#用鏈?zhǔn)椒椒ū磉_(dá)循環(huán)嵌套

    這篇文章主要介紹了C#用鏈?zhǔn)椒椒ū磉_(dá)循環(huán)嵌套的相關(guān)資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • 如何用C#創(chuàng)建用戶自定義異常淺析

    如何用C#創(chuàng)建用戶自定義異常淺析

    雖然在 C# 語言中已經(jīng)提供了很多異常處理類,但在實(shí)際編程中還是會遇到未涉及的一些異常處理,這篇文章主要給大家介紹了關(guān)于如何用C#創(chuàng)建用戶自定義異常的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • C#文件管理類Directory實(shí)例分析

    C#文件管理類Directory實(shí)例分析

    這篇文章主要介紹了C#文件管理類Directory,非常實(shí)用,需要的朋友可以參考下
    2014-08-08
  • 在.NET?WebService中跨域CORS問題的解決方案

    在.NET?WebService中跨域CORS問題的解決方案

    在現(xiàn)代的Web應(yīng)用程序開發(fā)中,跨域資源共享(Cross-Origin?Resource?Sharing,?CORS)問題是開發(fā)者經(jīng)常遇到的一個挑戰(zhàn),在這篇博客中,我們將深入探討如何在?.NET?WebService?中解決CORS問題,幫助開發(fā)者順利實(shí)現(xiàn)跨域請求,需要的朋友可以參考下
    2024-05-05
  • 十大C#中最具價值的語法糖分享

    十大C#中最具價值的語法糖分享

    C#語言是世界最優(yōu)雅的語言之一,深受廣大程序員的喜歡,尤其是其中的一些語法糖,下面就跟隨小編一起來了解一下其中10個比較實(shí)用的語法糖吧
    2024-11-11
  • C#數(shù)組的常用操作方法小結(jié)

    C#數(shù)組的常用操作方法小結(jié)

    Array數(shù)組在C#中同樣是最基本的數(shù)據(jù)結(jié)構(gòu),下面為大家C#數(shù)組的常用操作方法小結(jié),皆為細(xì)小的代碼段,歡迎收看收藏
    2016-05-05
  • C#把寫好的類編譯成dll文件的操作方法

    C#把寫好的類編譯成dll文件的操作方法

    在C#中,DLL文件是一種可重用的代碼庫,它包含了已編譯的函數(shù)、類、數(shù)據(jù)和資源,DLL文件可以被多個應(yīng)用程序共享和重用,這樣可以提高代碼的復(fù)用性和可維護(hù)性,所以本文給大家介紹了C#如何把寫好的類編譯成dll文件,需要的朋友可以參考下
    2024-09-09
  • 解決WPF附加屬性的Set函數(shù)不調(diào)用的問題

    解決WPF附加屬性的Set函數(shù)不調(diào)用的問題

    這篇文章介紹了解決WPF附加屬性的Set函數(shù)不調(diào)用的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06

最新評論

孝感市| 天等县| 虎林市| 景宁| 方正县| 柘荣县| 金阳县| 南木林县| 偃师市| 密山市| 德江县| 浪卡子县| 彝良县| 嵊州市| 依安县| 屏东市| 广丰县| 淮安市| 祁连县| 孝昌县| 华亭县| 西充县| 河北区| 横峰县| 海南省| 贡山| 鹰潭市| 纳雍县| 托里县| 保德县| 惠安县| 涿州市| 海林市| 隆回县| 云南省| 绥德县| 开原市| 湘潭县| 六枝特区| 赤水市| 布尔津县|