C# 中的 record类型详解

💡 原文中文,约2100字,阅读约需5分钟。
📝

内容提要

C# 9.0 引入了 record 类型,提供简洁的不可变数据模型,支持值比较,适合用于数据传输对象和值对象。与传统类相比,record 自动生成构造函数、属性和比较方法。C# 10 还支持值类型的 record struct,简化模型定义和表示不可变状态。

🎯

关键要点

  • C# 9.0 引入了 record 类型,提供简洁的不可变数据模型。
  • record 类型支持值比较,适合用于值对象。
  • record 是引用类型,默认不可变,支持值比较。
  • record 自动生成构造函数、属性、比较方法和 ToString 方法。
  • record 的属性使用 init 访问器,表示只能在对象初始化时赋值。
  • record 重写了 Equals 和 GetHashCode 方法,比较内容而非引用地址。
  • 使用 with 表达式可以创建对象的副本并修改部分属性。
  • C# 10 支持 record struct,作为值类型的不可变数据模型。
  • record class 是引用类型,record struct 是值类型,且可以声明为 readonly。
  • record 适用于数据传输对象、值对象建模、不可变状态表示和简化模型定义。
  • record 支持继承和模式匹配,增强了功能。

延伸问答

C# 中的 record 类型有什么特点?

record 类型是引用类型,默认不可变,支持值比较,自动生成构造函数、属性和比较方法。

如何使用 with 表达式创建 record 对象的副本?

可以使用 with 表达式创建对象的副本并修改部分属性,例如:var p3 = p1 with { LastName = '四' };

C# 10 中 record struct 的特点是什么?

record struct 是值类型,可以声明为 readonly,保证不可变性。

record 类型适合用于哪些场景?

record 类型适合用于数据传输对象、值对象建模、不可变状态表示和简化模型定义。

record 类型如何实现值比较?

record 类型重写了 Equals 和 GetHashCode 方法,比较的是内容而不是引用地址。

record 类型与传统类有什么区别?

record 类型默认不可变,支持值比较,而传统类是可变的,默认使用引用比较。

➡️

继续阅读