新闻中心
C#的record struct是什么?它与record class有什么区别?
record struct是C# 10引入的值类型数据载体,结合struct性能与record语义,适用于高频创建的小对象;其为栈分配、默认只读、按值比较且支持with表达式(C# 12起),而record class为堆分配引用类型,适合需共享或继承的场景,两者核心差异在于内存模型、赋值行为与使用语义。

record struct 是 C# 10 引入的一种值类型,用于定义不可变的、轻量级的数据载体。它结合了 struct 的性能优势(栈分配、无垃圾回收压力)和 record 的语义特性(如值相等性、with 表达式支持等)。与传统的 record class 相比,它们在类型本质、内存行为和使用场景上有明显差异。
record struct 的特点
record struct 是基于值类型的 record,适用于需要高性能和低内存开销的场景:
- 它是值类型,存储在栈上(通常),避免堆分配
- 默认字段是 readonly,确保不可变性
- 支持基于值的相等性比较(两个实例字段相同即视为相等)
- 支持 with 表达式(C# 12 起对 readonly record struct 支持)
- 可以声明位置参数,编译器自动生成构造函数和属性
示例:
public readonly record struct Person(string Name, int Age);
record class 的特点
record class 是引用类型,更接近传统面向对象的设计:
千鹿Pr助手
智能Pr插件,融入众多AI功能和海量素材
128
查看详情
- 它是引用类型,实例分配在堆上,由 GC 管理
- 默认也是不可变的(通过 init-only 属性)
- 同样支持值语义的相等性判断(比较字段内容而非引用)
- 天然支持 with 表达式创建副本
- 可继承(但 record 之间继承有限制)
示例:
public record class Person(string Name, int Age);
主要区别对比
-
内存模
型不同:struct 存在栈或内联在其他对象中,class 在堆上分配 - 赋值行为不同:record struct 赋值时复制整个数据,record class 只复制引用
- 相等性实现方式:两者都按字段比较,但 struct 不涉及 null 判断,class 需处理引用为 null 的情况
- 性能特征:record struct 更适合高频创建的小对象,避免 GC 压力;record class 更适合生命周期长或需多处共享的对象
- 可变性控制:record struct 推荐标记为 readonly,防止装箱导致的可变问题;record class 天然隔离
使用建议
- 如果数据小(比如少于 16 字节)、频繁创建/销毁,优先考虑 record struct
- 需要引用语义(如多个地方共享同一实例)时用 record class
- 担心装箱性能或意外修改时,将 record struct 声明为 readonly
- 需要继承或与其他类集成时,record class 更合适
基本上就这些。选择哪种取决于你对性能、内存和语义的需求。record struct 更“轻”,record class 更“通用”。
以上就是C#的record struct是什么?它与record class有什么区别?的详细内容,更多请关注其它相关文章!
# 怎么处理
# 房地产网站建设总部
# 创业垂直网站怎么做推广
# 建设网站需要什么栏目
# 网站seo权重
# 绍兴网站建设怎样
# 葫芦岛seo优化推广
# 湖南网站建设程序
# 网站推广统计图怎么做好
# 郑州做网站优化电话
# 开封智能营销推广招商
# 有什么
# 字节
# 如何实现
# 有什么区别
# 更适合
# 如何使用
# 它是
# 适用于
# 面向对象
# 它与
# c#
# 区别
# 栈
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
智慧团建扫码登录入口 智慧团建扫码登录入口官网版
NetBeans Ant项目:自动化将资源文件复制到dist目录的教程
Sublime Text怎么设置垂直标尺_Sublime配置Rulers规范代码长度
菜鸟取件码是什么怎么查 最全查询渠道汇总
GemBox Document HTML转PDF垂直文本渲染问题及解决方案
如何将一个大型PHP应用拆分为多个Composer包_微服务与模块化架构的Composer实践
韩剧圈正版入口页面_韩剧圈官网登录链接
QQ邮箱登录官网首页 腾讯QQ邮箱网页入口
《燕云十六声》两周内达九百万玩家!位居畅销榜第五
J*aScript中赋值与自增运算符的复杂交互与执行机制
b站怎么取消点赞_b站点赞取消操作方法
必由学网页版入口 必由学官方平台直接访问
必由学官方网站入口 必由学学生教师共用登录通道
vivo手机参数配置怎么增强信号_vivo手机参数配置信号增强方法
蛙漫漫画官网在线入口 蛙漫全本漫画免费阅读平台
如何使用Node.js csv 包按条件移除含空字段的CSV记录
Python vgamepad库按键模拟:正确使用XUSB_BUTTON常量
php源码怎么在电脑上测试_电脑测试php源码方法步骤【教程】
一加 Nord 5 隐私权限异常_一加 Nord 5 系统安全优化
c++中的const_cast和reinterpret_cast怎么用_c++四种类型转换
没有大陆身份证/银行卡如何实名微信? 亲测有效的几种方法分享
Composer的 "check-platform-reqs" 命令有什么用_在部署前检查生产环境是否满足Composer依赖需求
jQuery Mask 插件中实现电话号码固定前导零的教程
Golang如何实现状态模式管理对象状态_Golang State模式实现技巧
Golang如何处理RPC请求负载均衡_Golang RPC请求负载均衡策略与实践
品牌机怎么重装系统 联想/戴尔/惠普笔记本恢复出厂系统教程
Lar*el表单中优雅地处理“返回”按钮以规避验证:最佳实践指南
邮编格式怎么匹配地址_根据邮编格式快速匹配详细地址的技巧
J*aScript map 方法中处理循环元素为空数组的策略
妖精动漫免费平台 妖精动漫官网资源观看网址
Composer的 "licenses" 命令如何帮助你遵守开源协议_检查项目依赖的许可证合规性
qq游戏免费畅玩入口_qq游戏电脑版快速启动
QQ邮箱稳定登录入口_QQ邮箱官方网站网页版使用
C#中解析不规范的HTML为XML 常见的坑与解决办法
2026春节假期票务安排_2026春节放假购票指南
qq游戏跨平台入口_qq游戏多设备同步登录
可靠CSGO开箱平台解析 CSGO开箱网合集
qq浏览器打开空白页怎么办 qq浏览器启动后显示白屏的解决教程
AO3同人作品网入口 AO3搜索引擎官网永久地址
Win11怎么开启省电模式_Win11电池节电模式自动开启
圆通快递查询实时追踪 圆通物流包裹状态快速查看
支付宝解绑银行卡步骤_支付宝如何解除绑定银行卡
修复二维数组索引越界异常:一维循环到二维坐标的正确映射
动漫花园资源网使用步骤_动漫花园资源网下载流程
html怎么在cmd下运行php文件_cmd运行html中php文件方法【教程】
Go Martini框架:动态服务解码后的图片内容
魅族17怎样用浏览器译外语网页_iPhone魅族17浏览器译外语网页【即时翻译】
Mac怎么查看崩溃日志_Mac控制台错误报告分析
抖音极速版最新版本 抖音极速版官方下载地址
优化HTML表单样式:解决输入框焦点跳动与元素间距问题


2025-11-11
浏览次数:次
返回列表
型不同:struct 存在栈或内联在其他对象中,class 在堆上分配