【C#点点滴滴】record和class的区别
record是C#9引进来的一个自定义类型,同样class也可以用来定义类型,那么他们有什么区别呢?下面通过一个表格来介绍一下record和class的区别:
record |
class |
概念 |
|
用来封装数据。 虽然record中也可以定义方法,事件等成员,但通常状况下,record是用来定义实体类,封装数据,特别是对于数据相同类在比较时,判等的情况。 |
用来封装数据和逻辑。 业务模型转成软件模型时,用oop思想来设计软件时,class是最小独立封装单位,也是最理想封装概念。 |
定义 | |
record Order(int Id, string Name, string? Description = null) | class Order(int Id,string Name,string? Description=null) { public int Id { get; }=Id; public string Name { get; }=Name; public string? Description { get; }=Description ; } |
相同点 | |
引用类型 | 引用类型 |
IL中间语言 .class private auto ansi beforefieldinit Order |
.class private auto ansi beforefieldinit Order extends [System.Runtime]System.Object |
不同点 | |
IL中间语言: .class private auto ansi beforefieldinit Order |
IL中间语言: .class private auto ansi beforefieldinit Order extends [System.Runtime]System.Object |
构造函数中定义的是只读属性 | 构造函数中定义的是私有类全局字段 |
ToString输出结构化数据 | ToString输出当前类型名 |
==,!= 用来比较数据 |
==,!= 用来比较引用地址 |
个性点 | |
当用record struct定义时为值类型 | 无 |
默认定义与record class定义一样 | 无 |
Deconstruct解构函数是独有的 | 无 |
Order order1 = new Order(1, "张三", "苹果"); Order order2 = order1 with {Id = 2,Name = "李四" }; |
不支持With |
文章来源微信公众号
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~
2017-02-17 转义字符
2017-02-17 C#中唯一的三元运算符
2017-02-17 位运算