0

0

C#中的Record类型有什么优势?C# 9新特性Record与Class的用法区别

小老鼠

小老鼠

发布时间:2025-11-29 10:16:02

|

305人浏览过

|

来源于php中文网

原创

record专为数据建模设计,强调“数据是什么”,默认不可变且支持值相等性,适合承载不变数据如API结果;class侧重行为与状态变化,适用于需动态修改的场景。

c#中的record类型有什么优势?c# 9新特性record与class的用法区别

Record类型是C# 9引入的,专为简化数据模型设计而生。它和class最核心的区别在于,record强调“数据是什么”,而class强调“能做什么”。当你需要一个主要用来承载数据、且不希望数据被随意更改的对象时,record就是更优的选择。

数据为中心 vs 行为为中心

选择record还是class,关键看这个类型的主要用途。

  • 用record:当你定义的是用户信息、配置项、API返回结果这类以存储和传输数据为主的对象。它的属性值确定后就不该轻易改变。
  • 用class:当你需要定义银行账户、游戏角色这类拥有复杂状态和行为,且状态会随时间或操作而改变的对象。

自带不可变性与值相等性

这是record两大核心优势,class默认不具备,需要大量手动代码才能实现。

白瓜AI
白瓜AI

白瓜AI,一个免费图文AI创作工具,支持 AI 仿写,图文生成,敏感词检测,图片去水印等等。

下载
  • 不可变性 (Immutability):record的属性默认是只读的,只能在创建时通过构造函数设置。一旦对象生成,其内部数据就不能再被修改。这天然保证了线程安全,多个线程可以放心读取同一个record实例,不用担心数据被意外篡改。
  • 值相等性 (Value-based Equality):两个record对象是否相等,取决于它们所有属性的值是否都相同,而不是看它们是不是同一个内存地址。编译器会自动重写Equals()GetHashCode()ToString()方法,省去了手写这些易错代码的麻烦。

语法极简,减少样板代码

定义一个数据类,record的代码量远少于class。

  • 位置记录 (Positional Records):一行代码搞定。例如:public record Person(string Name, int Age);。编译器会自动生成私有字段、公共只读属性、构造函数、解构函数以及重写的相等性方法。
  • with表达式:因为record不可变,所以不能直接修改属性。但可以用with关键字基于原对象创建一个新副本,并指定要更改的属性。例如:var newPerson = oldPerson with { Age = 30 };。这既保持了原对象的完整性,又方便地得到了更新后的数据。

基本上就这些。record让开发者能用极少的代码,获得一个安全、清晰、易于比较的数据容器,特别适合现代应用开发中的数据传输场景。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

317

2023.08.02

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

317

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

538

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

52

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

197

2025.08.29

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

465

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

13

2025.12.06

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

481

2023.08.10

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

27

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 8.7万人学习

CSS3 教程
CSS3 教程

共18课时 | 4.6万人学习

Rust 教程
Rust 教程

共28课时 | 4.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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