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