在 C# 9.0 中,微软引入了一种全新的类型——记录类型(record)。它专为表示不可变数据而设计,让开发者可以更简洁、安全地处理数据对象。本教程将从零开始,带你一步步了解 record 的基本语法、优势以及实际应用场景,即使是编程小白也能轻松上手!
传统的 C# 类(class)通常用于封装行为和状态,但当我们只需要一个“数据容器”时,写一堆属性、构造函数、Equals/GetHashCode 方法会显得冗长。而 record 就是为解决这个问题而生的。
使用 record,你可以用一行代码定义一个具有值语义(value-based equality)的不可变类型。
下面是一个最简单的 record 定义:
public record Person(string FirstName, string LastName); 这行代码等价于以下传统类的完整实现:
public class Person{ public string FirstName { get; init; } public string LastName { get; init; } public Person(string firstName, string lastName) { FirstName = firstName; LastName = lastName; } public override bool Equals(object? obj) => obj is Person p && FirstName == p.FirstName && LastName == p.LastName; public override int GetHashCode() => HashCode.Combine(FirstName, LastName); public override string ToString() => $"Person {{ FirstName = {FirstName}, LastName = {LastName} }}";} 可以看到,record 自动为你生成了:
init)Equals 和 GetHashCodeToString() 输出由于 record 默认是不可变的(属性只能在初始化时赋值),C# 提供了 with 表达式来创建修改后的新实例,而不改变原对象:
var person1 = new Person("张", "三");var person2 = person1 with { FirstName = "李" };Console.WriteLine(person1); // Person { FirstName = 张, LastName = 三 }Console.WriteLine(person2); // Person { FirstName = 李, LastName = 三 } 这种模式非常适合函数式编程风格,也避免了意外修改共享数据的风险。
| 特性 | class | record ||------|------------------|------------------|| 默认可变性 | 可变 | 不可变(属性为 init) || 相等性比较 | 引用相等 | 值相等 || 自动生成方法 | 否 | 是(Equals, GetHashCode, ToString) || 支持 with 表达式 | 否 | 是 |
当你需要表示不可变数据、DTO(数据传输对象)、配置项、消息体等场景时,record 是理想选择。它让代码更简洁、更安全,也更符合现代 C# 的开发理念。
C# 9.0 的 record 类型极大地简化了不可变数据结构的定义。通过位置参数、自动生成的方法以及 with 表达式,开发者可以写出更少、更清晰、更可靠的代码。无论你是刚接触 C# 的新手,还是经验丰富的老手,掌握 record 都将提升你的编码效率。
关键词回顾:C# 9.0、记录类型、record、不可变数据。
本文由主机测评网于2025-12-03发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025122340.html