通过序列化来执行深度复制,将对象序列化成二进制流,然后通过二进制反序列化给 某个新对象。这样就达到了深度复制的目的。
二进制序列化可以让对象保真(只要类加上[Serializable],不管私有成员还是共有成员 全部序列化),而另外普通的XML 序列化 则不能保真(因为不对private序列化)
另: MSDN 上所述的 类继承Icloneable 实现clone() 方法也可以,如果一个成员是A对象,A对象里又有B对象成员,那么非常繁琐。
所以尽量使用 序列化来完成。
[Serializable]
public class deepcopy
{
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);
}
}
}