


























转自:https://doubao.com/chat
在 C# 9.0 及以后的版本中,record是一种特殊的引用类型,它提供了简洁的语法来创建不可变的数据模型。以下是关于 C# record的详细介绍:
record是一种引用类型,但在很多方面表现得像值类型:
record的属性是只读的(通过init访问器)。record实例时,比较的是它们的属性值,而非引用。record的属性是只读的(通过init访问器)。record实例时,比较的是它们的属性值,而非引用。ToString()、Equals()、GetHashCode()和解构方法。ToString()、Equals()、GetHashCode()和解构方法。使用参数列表声明属性:
public record Person(string FirstName, string LastName);
相当于隐式定义了:
public string FirstName { get; init; }
public string LastName { get; init; }
public record Person
{
public string FirstName { get; init; }
public string LastName { get; init; }
};
record的属性默认是只读的,只能在初始化时设置值:
var person = new Person("John", "Doe");
初始化方式:
// 构造函数初始化
var person1 = new Person("Alice", "Smith");
record比较的是属性值,而非引用:
var p1 = new Person("John", "Doe");
var p2 = new Person("John", "Doe");
Console.WriteLine(p1 == p2);
record可以继承自其他record,但不能继承自普通类。sealed关键字防止被继承。public record Employee(string FirstName, string LastName, int EmployeeId)
: Person(FirstName, LastName);
创建一个新实例,复制原有属性并修改指定值:
var employee = new Employee("Alice", "Smith", 123);
var promotedEmployee = employee with { EmployeeId = 456 };
Console.WriteLine(employee.EmployeeId);
自动支持解构操作:
var person = new Person("John", "Doe");
var (first, last) = person;
| 特性 | record | class | struct |
|---|---|---|---|
| 类型 | 引用类型 | 引用类型 | 值类型 |
| 相等性 | 值语义 | 引用语义 | 值语义 |
| 默认不可变性 | 是(通过 init 访问器) | 否 | 否 |
| 内置方法 | 自动生成 | 需手动实现 | 需手动实现 |
| 继承 | 可继承自其他 record | 可继承自任何类 | 不可继承 |
record是 C# 中一种轻量级、不可变、具有值语义的类型,特别适合用于数据模型和需要频繁比较值的场景。它通过自动生成的方法减少了样板代码,提高了开发效率。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。