C# Record 类型详解
学习 C# 9 引入的 record 类型,掌握不可变数据建模与值相等性比较。 · 难度:入门 · +15XP
Record 类型概述
Record 是 C# 9 引入的一种引用类型,专为不可变数据建模而设计。与 class 不同,record 默认提供基于值的相等性(比较属性内容),而非引用相等性。它非常适合 DTO、API 响应、配置对象等场景。
基本语法
public record Person(string FirstName, string LastName);上述代码创建了一个具有两个只读属性(FirstName、LastName)的 record,并自动生成了构造函数、ToString、Equals、GetHashCode 和 Deconstruct 方法。
Record vs Class
| 特性 | Record | Class |
|---|---|---|
| 相等性 | 基于属性值 | 基于引用 |
| 可变性 | 默认不可变 | 可变 |
| 位置参数 | 支持 | 需手动编写 |
| With 表达式 | 支持 | 不支持 |
With 表达式
使用 with 关键字可以创建现有 record 的副本,并修改部分属性。
Person p1 = new("Alice", "Wang");
Person p2 = p1 with { LastName = "Li" };
Console.WriteLine(p2); // 输出: Person { FirstName = Alice, LastName = Li }继承与属性
Record 可以继承自另一个 record,但不可继承 class。
public record Student(string FirstName, string LastName, int Grade) : Person(FirstName, LastName);练习提示
- 尝试定义一个 record 表示“图书”(标题、作者、ISBN)。
- 使用
with修改作者并打印。 - 比较两个相同内容的 record 是否相等。