深复制

深克隆和浅克隆:

浅克隆:只对对象进行表层的复制,所谓表层就是只复制对对象进行值复制,对象中的引用类型,复制其引用地址。其实现通过对象的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);
            }
        }
    }
}

以上是一个深克隆的帮助类。也就这篇文章的主题。实现的思路就是将对象序列化到内存中,在将其反序列化成新的对象。

今天就写这么多

  

Top
收藏
关注
评论
原文地址:https://www.cnblogs.com/Joy-et/p/4364062.html