c# record与class的区别

在 C# 中,recordclass 是两种不同的类型。以下是它们之间的一些区别:

  1. 不可变性:record 是不可变的,一旦创建就不能修改其属性的值;而 class 是可变的,可以随时修改其属性的值。
record Person
{public string Name { get; init; }//设置成set可以修改public int Age { get; init; }
}class Person
{public string Name { get; set; }public int Age { get; set; }
}
  1. 值语义 vs 引用语义:使用 record 声明的类型是值类型,它们在比较时会比较其属性值;而 class 声明的类型是引用类型,它们在比较时比较的是引用地址。
var person1 = new Person { Name = "Alice", Age = 30 };
var person2 = new Person { Name = "Alice", Age = 30 };
var person3 = person1;bool isEqual1 = person1 == person2; // false
bool isEqual2 = person1 == person3; // true
  1. 衍生性:record 类型默认是密封的,即不能被继承;而 class 可以被继承。
record Person
{public string Name { get; init; }public int Age { get; init; }
}class Person
{public string Name { get; set; }public int Age { get; set; }
}class Employee : Person // 合法
{public string Department { get; set; }
}
  1. 默认行为:record 类型会自动生成适当的 EqualsGetHashCodeToString 方法,而 class 需要手动实现这些方法。
record Person
{public string Name { get; init; }public int Age { get; init; }
}class Person
{public string Name { get; set; }public int Age { get; set; }public override bool Equals(object obj){// 实现自定义的相等性比较逻辑}public override int GetHashCode(){// 实现自定义的哈希码生成逻辑}public override string ToString(){// 实现自定义的字符串表示形式}
}

总的来说,record 主要用于表示不可变的数据实体,提供了更多默认行为,而 class 主要用于表示可变的对象,可以被继承和自定义。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/645957.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArcEngine添加点要素、线要素、面要素及学习总结

基于C#的ArcEngine二次开发教程(13):点、线、面要素的绘制_arcengine onmousedown-CSDN博客 https://www.cnblogs.com/cannel/p/11074343.html ArcEngine绘制点、线、多边形、矩形、圆形、椭圆的代码_arcengine 开发 生成矩形-CSDN博客 https…

DocsOpenApi自动化校验

一、背景 生产环境的文档中心的OpenApi和Kong服务配置的OpenApi可能存在不一致的情况,比如生产环境的文档中心有某个OpenApi,但是Kong服务没有配置到,那客户使用就会有问题。所以,前段时间(M09版本)花了4个…

MS7256C:L1 频段卫星导航射频前端低噪声放大器芯片

1、描述 MS7256C 是一款具有高增益、低噪声系数的低噪声放 大器(LNA)芯片,支持 L1 频段多模式全球卫星定位,可 以应用于 GPS、北斗二代、伽利略、Glonass 等 GNSS 导航 接收机中。芯片采用先进工艺制造,封装采用 1…

HDD的烦恼:HAMR会让SMR黯然失色吗?

HDD相关阅读参考: HDD回暖于2024,与SSD决战于2028 HDD最后的冲刺:大容量硬盘的奋力一搏 叠瓦式磁记录技术(SMR)自20世纪90年代起开始研究,于2010年后逐渐商业化应用于高密度硬盘。该技术的核心理念在于通…

从一个简单的Ping案例来分析二层,三层的数据包封装过程

1. 应用程序生成数据DATA,加上传输层报文头(TCP/UDP Head),调用网络层服务(IP包头中的源地址由主机网卡直接得到,目的IP则由我们在使用应用程序时输入得到,如果是基于域名,调用一个通信过程DNS来获得目的IP&#xff0…

便捷接口调测:API 开发工具大比拼 | 开源专题 No.62

hoppscotch/hoppscotch Stars: 56.1k License: MIT Hoppscotch 是一个开源的 API 开发生态系统,主要功能包括发送请求和获取实时响应。该项目具有以下核心优势: 轻量级:采用简约的 UI 设计。快速:实时发送请求并获得响应。支持多…

独立站怎么建设对seo好?

现如今市面上就有不少开源的建站程序可供挑选,哪怕你不懂技术,不懂代码,也能建自己的独立站,效果比不少所谓的用自己技术开发的站都要好,本身做一个网站不难,但你做网站的目的是什么?是为了在搜…

【开源】基于JAVA语言的人事管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 管理员功能模块2.2 普通员工功能模块2.3 答辩文案 三、系统展示四、核心代码4.1 查询职称4.2 新增留言回复4.3 工资申请4.4 工资审核4.5 员工请假 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的人…

Spring 声明式事务 @Transactional(详解)【面试重点,小林出品】

关于 Transactional 注解的基本使用,推荐看Spring 声明式事务 Transactional(基本使用) 概述 本篇博客主要学习 Transactional 注解当中的三个常⻅属性: 1. rollbackFor:异常回滚属性.指定能够触发事务回滚的异常类型.可以指定多个异常类型 …

AIGC是什么?GPT-4.0、DALL·E以及Midjourney等多种智能服务

AIGC(人工智能生成内容,Artificial Intelligence Generated Content)是指利用人工智能技术自动生成的文本、图像、音频和视频等内容。随着技术的进步,AIGC已经成为创意产业和内容创作领域的一股新兴力量。MidTool作为一款集成了多…

qml与C++的交互

qml端使用C对象类型、qml端调用C函数/c端调用qml端函数、qml端发信号-连接C端槽函数、C端发信号-连接qml端函数等。 代码资源下载: https://download.csdn.net/download/TianYanRen111/88779433 若无法下载,直接拷贝以下代码测试即可。 main.cpp #incl…

ubuntu怎么查看有几个用户

在Ubuntu中,可以使用以下命令来查看系统中的用户数量: cat /etc/passwd | wc -l这个命令会读取 /etc/passwd 文件中的用户信息,并使用 wc -l 命令来计算行数,即用户数量。 另外,你也可以使用以下命令来查看当前登录到…

mmpose 2d姿态预测值转json文件

目录 效果图: 参考 模板文件下载地址: python预测代码: 效果图: <

51单片机ESP8266

一、MQTT透传AT固件 安信可提供的烧录WiFi固件工具&#xff1a; 链接: https://docs.ai-thinker.com/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B72 安信可提供的固件库链接: https://docs.ai-thinker.com/%E5%9B%BA%E4%BB%B6%E6%B1%87%E6%80%BB 经过测试&#xff0c;选择这个不可以…

为何选择 NetApp ONTAP 进行企业数据管理

为何选择 NetApp ONTAP 进行企业数据管理 1、支持当今的数据驱动型企业 当今的企业面临着快速应对新挑战和机遇的压力。为了支持组织&#xff0c;IT 部门必须同时履行以下三个关键优先事项&#xff1a;1) 为当今的业务关键型应用程序提供可靠的支持&#xff1b;2) 随着数据增长…

Zephyr 源码调试

背景 调试环境对于学习源码非常重要&#xff0c;但嵌入式系统的调试环境搭建稍微有点复杂&#xff0c;需要的条件略多。本文章介绍如何在 Zephyr 提供的 qemu 上调试 Zephyr 源码&#xff0c;为后续分析 Zephyr OS 相关原理做铺垫。 环境 我的开发环境为 wsl ubuntu&#xf…

Redis 击穿、穿透、雪崩产生原因解决思路

大家都知道&#xff0c;计算机的瓶颈之一就是IO&#xff0c;为了解决内存与磁盘速度不匹配的问题&#xff0c;产生了缓存&#xff0c;将一些热点数据放在内存中&#xff0c;随用随取&#xff0c;降低连接到数据库的请求链接,避免数据库挂掉。需要注意的是&#xff0c;无论是击穿…

Javascript事件循环模型之同步和异步

1、前言 众所周知Javascript是⼀⻔单线程语⾔&#xff0c;这也就决定了在Javascript中默认情况下同一个时间只能做一件事情&#xff0c;这个特性就造成了js的一些局限性&#xff0c;比如我们的页面需要发送HTTP请求从服务器获取数据时&#xff0c;就会出现等待数据返回之前页面…

如何快速上手Python开发以及学习资料推荐

学习Python并快速上手项目开发&#xff0c;需要制定一个系统的学习计划和实践策略。我的个人建议是&#xff1a; 基础知识入门&#xff1a; 安装Python环境&#xff1a;首先确保在电脑上安装了Python&#xff08;建议从官方网站python.org下载最新稳定版&#xff09;&#xff0…

逻辑回归中的损失函数梯度下降

一、引言 逻辑回归中的损失函数通常采用的是交叉熵损失函数&#xff08;cross-entropy loss function&#xff09;。在逻辑回归中&#xff0c;我们通常使用sigmoid函数将线性模型的输出转换为概率值&#xff0c;然后将这些概率值与实际标签进行比较&#xff0c;从而计算损失。 …