深克隆和浅克隆:
浅克隆:只对对象进行表层的复制,所谓表层就是只复制对对象进行值复制,对象中的引用类型,复制其引用地址。其实现通过对象的MemberwiseClone()方法进行实现。
深克隆:则是对对象进行完整的重新建立一个与之一样的对象,但其在内存中是没有交叠的。而浅复制有(对象中的引用对象)。
当然这里只是对深浅克隆的文字描述,关于这方面的知识,网上和书本上多得是。
今天,我想写的重点是---上代码。如下:
/// <summary> /// 深克隆帮助类 /// </summary> public class DeepCloneHelper { /// <summary> /// 实现深克隆 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="t"></param> /// <returns></returns> public static T DeepClone<T>(T t) where T : class { BinaryFormatter binaryFormatter = new BinaryFormatter(); using (MemoryStream ms = new MemoryStream()) { binaryFormatter.Serialize(ms, t); // ms.Position = 0; ms.Seek(0, SeekOrigin.Begin);//注意将ms.Position设为0,才可以实现实体的反序列化 return (T)binaryFormatter.Deserialize(ms); } } /// <summary> /// 深克隆 /// </summary> /// <param name="obj"></param> /// <returns></returns> public static object DeepClone(object obj) { BinaryFormatter binaryFormatter = new BinaryFormatter(); using (MemoryStream ms = new MemoryStream()) { binaryFormatter.Serialize(ms, obj); //ms.Position = 0; ms.Seek(0, SeekOrigin.Begin); //注意将ms.Position设为0,才可以实现实体的反序列化(至于为什么,要说到流了) return binaryFormatter.Deserialize(ms); } } } }
以上是一个深克隆的帮助类。也就这篇文章的主题。实现的思路就是将对象序列化到内存中,在将其反序列化成新的对象。
今天就写这么多
原文:http://www.cnblogs.com/Joy-et/p/4364062.html