请教一个深拷贝 拷贝深度的问题?
--------------------编程问答-------------------- 你这个例子跟拷贝没什么关系,只是创建新的对象罢了。深拷贝是要递归拷贝的,一般情况下也可以用序列化的方法。 --------------------编程问答-------------------- Point对象没有克隆了一份
其实就是同一个对象
是递归拷贝 --------------------编程问答-------------------- 深拷贝 指的是值一样只不过地址不一样 你这个只是创建了一个新对象 --------------------编程问答--------------------
class TestClone: ICloneable
{
Point pt = new Point();
public int[] intArr = new int[2];
List<Point> oldList = new List<Point>();
public object Clone()
{
//请问如何实现深克隆?
return null;
}
}
//请问如何实现深克隆? --------------------编程问答-------------------- using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
public static T DeepClone<T>(T obj)
{
using (var ms = new MemoryStream())
{
var formatter = new BinaryFormatter();
formatter.Serialize(ms, obj);
ms.Position = 0;
return (T) formatter.Deserialize(ms);
}
}
注意T类型必须实现ISerializable接口。 --------------------编程问答--------------------
+1
没看出哪有拷贝 --------------------编程问答--------------------
TestClone类标记Serializable
在Clone方法中 将自己序列化 跟着再反序列化出一个新的TestClone对象 该对象跟原来对象一模一样 但就不是同一个东西
缺陷就是 TestClone以及内部成员都需要标记为Serializable --------------------编程问答-------------------- 参见下图:
--------------------编程问答-------------------- 楼主其实想问的是,当一个对象被深拷贝以后,里面的List对象会不会被深拷贝下来
按照楼主的方法,List对象是不能深拷贝下来的。
因为楼主只是在Clone方法中新建了一个对象,没有实现复制的过程。 --------------------编程问答-------------------- 简单地说 new 这个关键字只是将对象本体新建了一份,根本就没有复制的功能。
要深度复制,必须使用类似递归的方法将要复制的对象及对象下面的所有子对象,子子对象,子子子对象....一一复制。
补充:.NET技术 , C#