深拷贝和浅拷贝

深拷贝和浅拷贝

  • 浅拷贝
    • 指拷贝原始对象中所有的非静态值类型和所有引用类型成员的引用(拷贝后的对象共享所有引用类型成员的实际对象
    • 类型基类System.Object已经为所有类型实现了浅拷贝,类型所要做的就是公开一个复制的接口,这个接口一般借由实现ICloneable接口来实现,ICloneable只包含了一个Clone方法,该方法即可以被实现为浅复制也可以被实现深拷贝
      img
    • 实现方式:
      1. 实现ICloneable接口来实现对象浅拷贝(MemberwiseClone)
        img
  • 深拷贝
    • 指拷贝一个对象时,当存在值类型时将对象里面的值类型拷贝,当存在引用类型时,不仅仅将对象的引用进行拷贝,还将该对象引用的值也一起拷贝(拷贝后的对象跟源对象完全互相独立
      img
    • 实现方式
      1. 自己手动new对象
        img
      2. 反射
        img
      3. 序列化和反序列化
        img
  • 效果:
    img
  • 注意:
    • 一般可被继承的类型应该避免实现ICloneable接口, 因为这样将强制所有的子类型都需要实现ICloneable接口,否则将使类型的拷贝不能覆盖子类的新成员
  • 链接:
    https://www.cnblogs.com/dotnet261010/p/12329220.html
posted @ 2023-06-16 11:37  乐天--  阅读(19)  评论(0)    收藏  举报