C# Record 类型详解
掌握 C# 9 引入的 Record 类型,理解其值相等性、不可变性和 with 表达式。 · 难度:入门 · +15XP
什么是 Record 类型?
Record 是 C# 9 引入的一种引用类型,专为不可变数据建模而设计。与 class 不同,Record 默认具有基于值的相等性(比较所有属性),而非引用相等性。
定义 Record
public record Person(string FirstName, string LastName);编译器会自动生成:构造函数、解构方法、Equals、GetHashcode、ToString 以及 with 表达式支持。
与 Class 的核心区别
| 特性 | class | record |
|---|---|---|
| 相等性 | 引用相等 | 值相等(所有属性) |
| 可变性 | 默认可变 | 默认不可变(init 属性) |
| 解构 | 需手动实现 | 自动生成 |
| ToString | 类型名 | 属性名+值 |
with 表达式
var person1 = new Person("Alice", "Wang");
var person2 = person1 with { LastName = "Li" };
Console.WriteLine(person1); // Person { FirstName = Alice, LastName = Wang }
Console.WriteLine(person2); // Person { FirstName = Alice, LastName = Li }位置记录 vs 属性记录
位置记录使用主构造函数:public record Point(int X, int Y);。属性记录则显式声明属性:
public record Student
{
public string Name { get; init; }
public int Age { get; init; }
}练习提示
- 尝试定义一个 Record 并比较两个相同数据的实例,看 Equals 返回 true。
- 使用 with 表达式克隆并修改一个属性。
- 将 Record 改为 class,观察相等性行为变化。