7.C#浅拷贝和深拷贝的区别

  1. 7.CSharp中浅拷贝和深拷贝的区别
    1. 7.1 题目
    2. 7.2 深入解析
      1. 浅拷贝(Shallow Copy)
      2. 深拷贝(Deep Copy)
      3. 总结
    3. 7.3 答题示例
    4. 7.4 关键词联想

7.CSharp中浅拷贝和深拷贝的区别


7.1 题目

浅拷贝和深拷贝的区别是什么?他们分别有哪些场景使用?可以举例说明。


7.2 深入解析

在C#中,浅拷贝(Shallow Copy)和深拷贝(Deep Copy)是两种不同的对象复制方式,它们的区别在于复制的内容和效果。

浅拷贝(Shallow Copy)

  • 定义

    • 浅拷贝只复制对象的引用地址,而不复制对象本身。即两个对象指向同一内存地址,修改其中一个对象的值会影响到另一个对象。
  • 示例

    • 当一个对象 A 被浅拷贝给另一个对象 B 时,修改对象 A 的内容会影响到对象 B。
  • 举例

    • 比如引用对象 A 和引用对象 B,让 A = B 就是浅拷贝。此时 A 和 B 的引用地址相同,改变 A 中的内容,B 也会随之变化。
  • 使用场景

    • 比如配置表和不变的数据,使用浅拷贝可以节约内存。

深拷贝(Deep Copy)

  • 定义

    • 深拷贝将对象及其所有值都复制一份,创建一个全新的对象。即两个对象互相独立,修改其中一个对象的值不会影响另一个对象。
  • 示例

    • 当一个对象 A 被深拷贝给另一个对象 B 时,修改对象 A 的内容不会影响到对象 B。
  • 举例

    • 如果想要深拷贝,可以通过递归复制对象的所有成员,或者使用序列化和反序列化来实现。简单处理就是通过 new 关键字创建一个新的对象及其成员。
  • 使用场景

    • 拷贝过来希望独立,改变拷贝对象不会影响原对象的功能(彼此独立)。

总结

  • 浅拷贝

    • 只复制对象的引用地址,两个对象指向同一内存地址,修改其中一个对象的值会影响到另一个对象。
  • 深拷贝

    • 复制对象及其所有值,创建一个全新的对象,两个对象互相独立,修改其中一个对象的值不会影响另一个对象。

7.3 答题示例

“浅拷贝只复制对象本身的字段或属性引用(如通过 MemberwiseClone),因此源对象和目标对象会共享相同的子对象;深拷贝会递归复制所有对象及其成员(可以用序列化/反序列化或手动复制实现),生成完全独立的副本,互不影响。”


7.4 关键词联想

  • 浅拷贝 (Shallow Copy)

    • 引用共享
    • MemberwiseClone
    • 子对象不复制
  • 深拷贝 (Deep Copy)

    • 完整复制
    • 序列化/手动复制
    • 独立副本
  • 影响范围

    • 浅拷贝:修改源或目标的子对象互相影响
    • 深拷贝:互不干扰


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏