做外贸必应网站产品曝光/镇江百度推广

做外贸必应网站产品曝光,镇江百度推广,北湖区网站建设,还有做网站的必要吗在编程中,浅拷贝和深拷贝是用于复制对象的两种不同方式,它们的主要区别在于复制对象时对对象内部成员的处理方式。今天我们对此进行讨论。 目录 1 浅拷贝 2 深拷贝 1 浅拷贝 浅拷贝创建一个新对象,新对象的属性值会复制原始对象的属性值…

在编程中,浅拷贝和深拷贝是用于复制对象的两种不同方式,它们的主要区别在于复制对象时对对象内部成员的处理方式。今天我们对此进行讨论。

目录

 1  浅拷贝

 2  深拷贝


 1  浅拷贝

浅拷贝创建一个新对象,新对象的属性值会复制原始对象的属性值。对于值类型的属性,会复制其实际的值;而对于引用类型的属性,只会复制引用,即新对象和原始对象的引用类型属性会指向同一个内存地址。这意味着,如果通过新对象修改引用类型属性的内容,原始对象中对应的属性内容也会被修改。

示例代码:

        // 定义一个引用类型的类class Person{public string Name;public readonly Address Address;public Person(string name, Address address){Name = name;Address = address;}// 浅拷贝方法public Person ShallowCopy()=>(Person)MemberwiseClone();}// 定义另一个引用类型的类class Address{public string City;public Address(string city)=>City = city;}public static void Main(string[] args){Address address = new Address("JiangXi");Person originalPerson = new Person("Nicole Potter", address);// 进行浅拷贝Person shallowCopiedPerson = originalPerson.ShallowCopy();// 修改浅拷贝对象的值类型属性shallowCopiedPerson.Name = "Starry";// 修改浅拷贝对象的引用类型属性shallowCopiedPerson.Address.City = "AnYuan";Console.WriteLine($"Original Person: Name - {originalPerson.Name}, City - {originalPerson.Address.City}");Console.WriteLine($"Shallow Copied Person: Name - {shallowCopiedPerson.Name}, City - {shallowCopiedPerson.Address.City}");}

运行结果:

需要注意的是:虽然我们说引用类型只会复制引用,如果通过新对象修改引用类型属性的内容,原始对象中对应的属性内容也会被修改。但是string是特殊的引用类型,对于 string 来说,由于其不可变性,即使多个引用指向同一个 string 对象,当对其中一个引用进行 “修改” 操作时,实际上是创建了新的对象,不会影响其他引用所指向的原对象。string 类型具有不可变性,意味着一旦一个 string 对象被创建,它的内容就不能被更改。当你对一个 string 变量执行修改操作时,实际上是创建了一个新的 string 对象,并让变量指向这个新对象,而原对象保持不变。)

(MemberwiseClone() 是 System.Object 类中的一个受保护的方法,由于所有类都直接或间接地继承自 System.Object 类,因此所有类都可以使用该方法。它的作用是创建当前对象的一个浅拷贝。)

 2  深拷贝

深拷贝同样会创建一个新对象,新对象的属性值会复制原始对象的属性值。与浅拷贝不同的是,对于引用类型的属性,深拷贝会递归地复制引用类型对象本身(“递归地复制引用类型对象本身” 意味着,如果一个引用类型对象包含其他引用类型的属性,深拷贝会继续对这些嵌套的引用类型属性进行复制,直到所有引用类型属性都被复制为独立的对象。),而不是仅仅复制引用。这意味着新对象和原始对象的引用类型属性指向不同的内存地址,修改新对象的引用类型属性内容不会影响原始对象的对应属性内容。

代码示例:

        // 定义一个引用类型的类class Person{public string Name;public readonly Address Address;public Person(string name, Address address){Name = name;Address = address;}// 深拷贝方法public Person DeepCopy()=>new Person(Name, new Address(Address.City));}// 定义另一个引用类型的类class Address{public string City;public Address(string city)=>City = city;}public static void Main(string[] args){Address address = new Address("JiangXi");Person originalPerson = new Person("Nicole Potter", address);// 进行深拷贝Person deepCopiedPerson = originalPerson.DeepCopy();// 修改浅拷贝对象的值类型属性deepCopiedPerson.Name = "Starry";// 修改浅拷贝对象的引用类型属性deepCopiedPerson.Address.City = "AnYuan";Console.WriteLine($"Original Person: Name - {originalPerson.Name}, City - {originalPerson.Address.City}");Console.WriteLine($"Shallow Copied Person: Name - {deepCopiedPerson.Name}, City - {deepCopiedPerson.Address.City}");}

运行结果:

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

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

相关文章

微信小程序实现拉卡拉支付

功能需求:拉卡拉支付(通过跳转拉卡拉平台进行支付),他人支付(通过链接进行平台跳转支付) 1.支付操作 //支付 const onCanStartPay async (obj) > {uni.showLoading({mask: true})// 支付接口获取需要传…

使用ESP-IDF来驱动INMP441全向麦克风

之前的文章我们讲过了I2S。 I2S是什么通信协议?它如何传输音频数据?它和I2C是什么关系?_i2c接口和i2s-CSDN博客文章浏览阅读836次,点赞12次,收藏14次。这个可以参考ADC来理解,我们的ADC也是有左对齐和右对…

【带你 langchain 双排系列教程】6.LangChain多模态输入与自定义输出实战指南

一、为什么需要多模态交互? 在真实业务场景中,数据从来都不是单一形式的。想象一个智能客服系统需要同时分析用户的文字描述、上传的产品图片和语音留言,或者一个内容审核系统需要检查文本、图像和视频的组合内容。传统单一模态的处理方式已…

【Bluedroid】AVRCP 连接源码分析(三)

接着上一篇【Bluedroid】AVRCP 连接源码分析(一)-CSDN博客,继续AVRCP连接的源码分析。 AVRC_OpenBrowse /packages/modules/Bluetooth/system/stack/avrc/avrc_api.cc /*****************************************************************…

基于大语言模型的推荐系统(1)

推荐系统(recommendation system)非常重要。事实上,搜索引擎,电子商务,视频,音乐平台,社交网络等等,几乎所有互联网应用的核心就是向用户推荐内容,商品,电影&…

C语言基础要素:安装 Visual Studio 2022

安装 Visual Studio 2022 Visual Studio 是由微软开发的一款集成开发环境(IDE),支持多种编程语言和开发平台。它提供了丰富的工具和功能,帮助开发者高效地编写、调试和部署应用程序。无论是桌面应用、Web 应用还是移动应用&#…

[通俗易懂C++]:指针和const

之前的文章有说过,使用指针我们可以改变指针指向的内容(通过给指针赋一个新的地址)或者改变被保存地址的值(通过给解引用指针赋一个新值): int main() {int x { 5 }; // 创建一个整数变量 x,初始值为 5int* ptr { &x }; // 创建一个指针 ptr,指向 …

华为昇腾服务器(固件版本查询、驱动版本查询、CANN版本查询)

文章目录 1. **查看固件和驱动版本**2. **查看CANN版本**3. **其他辅助方法**注意事项 在华为昇腾服务器上查看固件、驱动和CANN版本的常用方法如下: 1. 查看固件和驱动版本 通过命令行工具 npu-smi 执行以下命令查看当前设备的固件(Firmware&#xff0…

Blaze RangePartitioning 算子Native实现全解析

引言:本文将全面且深入地解析Blaze RangePartitioning算子的Native实现过程。相较于原生Spark,RangePartitioning的Native实现在执行时间上达到了30%的显著下降,同时在资源开销方面节省了高达76%。这一改进大幅降低了运行成本,展现…

卷积与动态特征选择:重塑YOLOv8的多尺度目标检测能力

文章目录 1. YOLOv8的网络结构概述2. 添加注意力机制2.1 为什么添加注意力机制?2.2 如何将注意力机制集成到YOLOv8中?2.3 效果分析 3. C2f模块的集成3.1 C2f模块简介3.2 如何在YOLOv8中集成C2f模块?3.3 效果分析 4. 卷积操作的优化4.1 卷积操…

Web入侵实战分析-常见web攻击类应急处置实验2

场景说明 某天运维人员,发现运维的公司站点被黑页,首页标题被篡改,你获得的信息如下: 操作系统:windows server 2008 R2业务:公司官网网站架构:通过phpstudy运行apache mysqlphp开放端口&…

WebXR教学 02 配置开发环境

默认操作系统为Windows 1.VS Code VS Code 是一款轻量级、功能强大的代码编辑器,适用于多种编程语言。 下载 步骤 1:访问 VS Code 官方网站 打开浏览器(如 Chrome、Edge 等)。 在地址栏输入以下网址: https://code.v…

Flask实现高效日志记录模块

目录 一. 简介: 1. 为什么需要请求日志 二. 日志模块组成 1. 对应日志表创建(包含日志记录的关键字段) 2. 编写日志记录静态方法 3. 在Flask中捕获请求日志 4. 捕获异常并记录错误日志 5. 编写日志接口数据展示 6. 写入数据展…

RoCBert:具有多模态对比预训练的健壮中文BERT

摘要 大规模预训练语言模型在自然语言处理(NLP)任务上取得了最新的最优结果(SOTA)。然而,这些模型容易受到对抗攻击的影响,尤其是对于表意文字语言(如中文)。 在本研究中&#xff0…

Jetpack Architecture系列教程之(三)——ViewModel控制器

目录 介绍 如何使用 添加依赖 构建ViewModel 分析ViewModel ViewModel生命周期 ViewModel加载原理 介绍 ViewModel 的出现是为了解决数据因Android UI控制器在生命周期活动中造成数据丢失的问题。 在一般情况下,页面数据丢失(转屏、闪退等生命周期…

在低功耗MCU上实现人工智能和机器学习

作者:Silicon Labs 人工智能(AI)和机器学习(ML)技术不仅正在快速发展,还逐渐被创新性地应用于低功耗的微控制器(MCU)中,从而实现边缘AI/ML解决方案。这些MCU是许多嵌入式…

rpc到自己java实现rpc调用再到rpc框架设计

目录 rpc(Remote Procedure Call)rpc一般架构为什么要引入rpc自己实现rpc调用1. 新建一个maven项目,加入hessian依赖2. 服务端3. Stub代理4. 客户端测试输出5. rpc程序分析附 请求参数和序列化程序 6. 总结 回顾RPCRPC 序列化协议RPC 网络协议注册中心的引入dubbo框…

【STM32 USB】USB CDC类

简介 USB CDC(communication device class)类是usb2.0标准下的一个子类,定义了通信相关设备的抽象集合。usb2.0标准下定义了很多子类,有音频类,CDC类,HID类,打印,大容量存储类&…

如何修改Windows系统Ollama模型存储位置

默认情况下,Ollama 模型会存储在 C 盘用户目录下的 .ollama/models 文件夹中,这会占用大量 C 盘空间,增加C盘“爆红”的几率。所以,我们就需要修改Ollama的模型存储位置 Ollama提供了一个环境变量参数可以修改Ollama的默认存在位…

Codes 开源免费研发项目管理平台 2025年第一个大版本3.0.0 版本发布及创新的轻IPD实现

Codes 简介 Codes 是国内首款重新定义 SaaS 模式的开源项目管理平台,支持云端认证、本地部署、全部功能开放,并且对 30 人以下团队免费。它通过创新的方式简化研发协同工作,使敏捷开发更易于实施。并提供低成本的敏捷开发解决方案&#xff0…