【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 |
文章来源微信公众号
想要更快更方便的了解相关知识,可以关注微信公众号

浙公网安备 33010602011771号