Z
ZHANK
编程在线教程C# 教程Record 记录类型
面向对象

Record 记录类型

record/record struct、值相等、with 表达式、不可变性、init

Record 记录类型

C# 9 引入 record——不可变引用类型,值相等比较(而非引用相等),搭配 with 表达式创建修改副本。

学完本章你将: 掌握 record/record struct、值相等、with 表达式。


record 声明

csharp
// 位置记录(最简形式)
public record Person(string Name, int Age);

var p1 = new Person("小明", 25);
var p2 = new Person("小明", 25);

// 值相等——而不是引用相等!
Console.WriteLine(p1 == p2);  // true
Console.WriteLine(p1.Equals(p2));  // true

// 自动生成的 ToString
Console.WriteLine(p1);  // Person { Name = 小明, Age = 25 }

with 表达式 —— 创建副本

csharp
var p1 = new Person("小明", 25);
var p2 = p1 with { Age = 26 };  // 复制 + 修改指定属性

Console.WriteLine(p1);  // Person { Name = 小明, Age = 25 }
Console.WriteLine(p2);  // Person { Name = 小明, Age = 26 }
// p1 不变——不可变性

record struct(C# 10+)

csharp
// record struct:值类型版 record(栈分配)
public readonly record struct Point(double X, double Y);

var p1 = new Point(1, 2);
var p2 = new Point(1, 2);
Console.WriteLine(p1 == p2);  // true

record vs class vs struct

| | record | class | struct | |---|---|---| | 相等性 | 值相等 | 引用相等 | 值相等 | | 不可变性 | 默认支持 with | 手动实现 | 手动实现 | | 分配 | 堆(引用类型) | 堆 | 栈(值类型) | | 适用 | 数据模型、DTO | 行为丰富的对象 | 小数据、高性能 |