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 类型默认不可变,支持值比较,而传统类是可变的,默认使用引用比较。
➡️