全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

.NET中的Record类型是什么?编写不可变数据模型的简洁之道

Record 是一种用于表示不可变数据模型的引用类型,通过简洁语法自动创建构造函数、只读属性、值语义比较、ToString() 和 with 表达式;1. 它强调“包含哪些数据”而非行为;2. 主构造函数属性默认只读,确保不可变性;3. with 表达式支持非破坏性修改;4. 相比 class 减少大量样板代码;5. 适用于 DTO、消息对象、配置等需值比较的场景。

.NET 中的 record 类型是一种专为表示不可变数据模型而设计的语言特性,首次在 C# 9.0 中引入。它简化了创建只读数据载体类的过程,让你用更少的代码获得值语义、清晰的结构和内置的行为。

什么是 Record?

Record 是一种引用类型,语法上类似于 class 或 struct,但语义上更侧重于“数据”的本质而非行为。它的核心目标是表达“这个对象包含哪些数据”,而不是“它能做什么”。

定义一个 record 非常简洁:

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

这一行代码自动为你生成:

  • 一个带有三个参数的构造函数
  • 三个只读属性(getters),其值在构造时设定
  • 基于值的 EqualsGetHashCode 方法(比较内容而非引用)
  • 自动实现的 ToString(),输出格式如:Person { FirstName = John, LastName = Doe, Age = 30 }
  • 支持非破坏性修改的 with 表达式

为什么适合不可变数据模型?

不可变意味着一旦对象被创建,其状态就不能更改。这在函数式编程、并发处理、缓存和数据一致性场景中非常有用。

record 天然支持不可变性:

  • 主构造函数中的属性默认是 get-only,外部无法修改
  • 你可以显式添加私有 set,但推荐保持只读
  • 如果需要“修改”,record 提供 with 表达式创建副本:
var person1 = new Person("Alice", "Smith", 25);
var person2 = person1 with { Age = 26 }; // 新实例,其他字段相同

这样既保证了原对象的安全,又实现了数据演进。

与 class 的关键区别

使用 class 实现相同功能需要大量样板代码:

  • 手动写构造函数和属性
  • 重写 Equals、GetHashCode 来实现值比较
  • 自定义 ToString() 显示内容
  • 自己实现 Copy 或 Clone 方法

而 record 自动完成这些,减少出错,提升可读性。

另外,record 支持继承(但不推荐深度使用),也支持自定义方法和额外属性:

public record Employee(string Name, decimal Salary) : Person(Name, "", 0)
{
public bool IsManager => Salary > 10000;
}

适用场景

record 特别适合以下情况:

  • DTO(数据传输对象):在 API 间传递数据
  • 消息或事件对象:如领域事件、命令
  • 配置或设置类:强调数据组合
  • 函数返回多个值的封装
  • 任何你希望按“值”比较的对象

如果你发现某个类大部分时间都在定义属性和写 Equals,那它很可能更适合定义为 record。

基本上就这些。record 不复杂,但容易忽略它的价值。用它来建模数据,代码会更清晰、更安全、更现代。


# 区别  # c#  # .net  # 为什么  # String  # 封装  # 构造函数  # bool  # int  # 继承  # class  # 引用类型  # public  # Struct  # var  # copy  # 并发  # 对象  # 事件  # 是一种  # 而非  # 自定义  # 如果你  # 你可以  # 都在  # 首次  # 多个  # 为你  # 做什么 


相关文章: 如何在阿里云域名上完成建站全流程?  建站主机如何选?高性价比方案全解析  如何在IIS7上新建站点并设置安全权限?  建站之星Pro快速搭建教程:模板选择与功能配置指南  教学论文网站制作软件有哪些,写论文用什么软件 ?  微信h5制作网站有哪些,免费微信H5页面制作工具?  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  如何选择香港主机高效搭建外贸独立站?  建站之星IIS配置教程:代码生成技巧与站点搭建指南  如何在云主机快速搭建网站站点?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  如何配置IIS站点权限与局域网访问?  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  贸易公司网站制作流程,出口贸易网站设计怎么做?  江苏网站制作公司有哪些,江苏书法考级官方网站?  南宁网站建设制作定制,南宁网站建设可以定制吗?  成都响应式网站开发,dw怎么把手机适应页面变成网页?  活动邀请函制作网站有哪些,活动邀请函文案?  济南企业网站制作公司,济南社保单位网上缴费步骤?  如何通过服务器快速搭建网站?完整步骤解析  潮流网站制作头像软件下载,适合母子的网名有哪些?  建站VPS配置与SEO优化指南:关键词排名提升策略  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  网站专业制作公司有哪些,做一个公司网站要多少钱?  已有域名建站全流程解析:网站搭建步骤与建站工具选择  如何在景安云服务器上绑定域名并配置虚拟主机?  重庆网站制作公司哪家好,重庆中考招生办官方网站?  南平网站制作公司,2025年南平市事业单位报名时间?  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  用v-html解决Vue.js渲染中html标签不被解析的问题  如何用PHP快速搭建CMS系统?  建站之星图片链接生成指南:自助建站与智能设计教程  建站之星好吗?新手能否轻松上手建站?  如何制作网站标识牌,动态网站如何制作(教程)?  如何选择建站程序?包含哪些必备功能与类型?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  公司网站设计制作厂家,怎么创建自己的一个网站?  制作国外网站的软件,国外有哪些比较优质的网站推荐?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  如何选择高效便捷的WAP商城建站系统?  内部网站制作流程,如何建立公司内部网站?  如何获取开源自助建站系统免费下载链接?  深圳网站制作案例,网页的相关名词有哪些?  建站之星2.7模板:企业网站建设与h5定制设计专题  javascript中对象的定义、使用以及对象和原型链操作小结  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  如何在建站之星绑定自定义域名?  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  建站之星代理如何优化在线客服效率? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。