面试经1:深度拷贝

浅拷贝:指的是拷贝一个对象时,仅仅拷贝对象的引用进行拷贝,但是拷贝对象和源对象还是引用同一份实体。

深拷贝:指的是拷贝一个对象时,不仅仅把对象的引用进行复制,还把该对象引用的值也一起拷贝。

浅拷贝实现:所有对象的父对象都是System.Object对象,这个父对象中有一个MemberwiseClone方法,该方法就可以用来实现浅拷贝(继承ICloneable接口,上面类中重写了IConeable接口的Clone方法)。

注:.NET中值类型默认是深拷贝的,而对于引用类型,默认实现的是浅拷贝。

1.利用二进制序列化反序列化实现深拷贝。

2.利用反射实现深拷贝。

上面反射的实现方式,对于相互引用的对象会出现StackOverflower的错误,由于对象的相互引用,会导致方法循环调用。

建议使用序列化,简单快捷的方式进行深拷贝。

本文是对面试被问到的深度拷贝问题的总结,看了好几位大牛的博客,自己也尝试着敲了下代码试了下。

原文地址:https://www.cnblogs.com/Julietma/p/10442630.html