【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 |
文章来源微信公众号
想要更快更方便的了解相关知识,可以关注微信公众号
****欢迎关注我的asp.net core系统课程****
《asp.net core精要讲解》 https://ke.qq.com/course/265696
《asp.net core 3.0》 https://ke.qq.com/course/437517
《asp.net core项目实战》 https://ke.qq.com/course/291868
《基于.net core微服务》 https://ke.qq.com/course/299524
《asp.net core精要讲解》 https://ke.qq.com/course/265696
《asp.net core 3.0》 https://ke.qq.com/course/437517
《asp.net core项目实战》 https://ke.qq.com/course/291868
《基于.net core微服务》 https://ke.qq.com/course/299524