C#的记录类型(Record)是什么?如何用它创建不可变对象?

小老鼠
发布: 2025-11-26 13:45:19
原创
376人浏览过
记录类型通过值语义相等性、init访问器实现不可变性、with表达式支持非破坏性修改,提供简洁语法定义不可变数据模型,适合需要内容比较和线程安全的场景。

c#的记录类型(record)是什么?如何用它创建不可变对象?

记录类型(Record)是 C# 9 引入的一种引用类型,专门用于简化不可变数据模型的定义。它本质上是类的特殊形式,自带值语义、内置相等性比较和简洁的语法,特别适合表示“数据容器”。

记录类型的核心特点

值语义相等性:两个记录实例只要所有属性值相同,就被认为是相等的,即使它们是不同的对象。这与普通类按引用比较不同。

不可变性支持:通过 init 访问器实现构造后属性不可变。

简洁的创建语法:支持使用 with 表达式进行非破坏性修改。

如何用记录创建不可变对象

1. 定义一个简单记录

使用 record 关键字声明,属性使用 init 而不是 set,确保只能在初始化时赋值:

public record Person(string FirstName, string LastName, int Age);
登录后复制

这是“位置记录”,编译器自动生成只读属性、构造函数和 Deconstruct 方法。

2. 使用对象初始化器创建实例

利用 init 属性或主构造函数传参创建对象:

var person = new Person("张", "三", 25);
// 或者使用具名方式
var person2 = new Person { FirstName = "李", LastName = "四", Age = 30 };
登录后复制

一旦创建,这些属性就不能再被修改。

爱派AiPy
爱派AiPy

融合LLM与Python生态的开源AI智能体

爱派AiPy 1
查看详情 爱派AiPy

3. 使用 with 表达式“修改”不可变对象

要基于现有对象创建新实例并更改部分值,使用 with

var updated = person with { Age = 26 };
登录后复制

这会创建一个新对象,原对象保持不变,实现非破坏性更新。

<font size="2>4. 自定义完整记录(非位置记录)

如果需要更多控制,可以像定义类一样写记录:

public record Person
{
    public string FirstName { get; init; }
    public string LastName { get; init; }
    public int Age { get; init; }
<pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">public Person(string firstName, string lastName, int age)
{
    FirstName = firstName;
    LastName = lastName;
    Age = age;
}
登录后复制

}

这种方式更灵活,可添加方法、验证逻辑等。

为什么记录适合不可变对象

记录类型天然鼓励不可变设计。它的相等性基于内容而非引用,配合 initwith,让开发者更容易写出线程安全、可预测的数据结构。尤其在函数式编程风格或需要频繁比较数据场景中非常有用。

基本上就这些。记录让 C# 中定义不可变数据变得简洁又强大。

以上就是C#的记录类型(Record)是什么?如何用它创建不可变对象?的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号