zoukankan      html  css  js  c++  java
  • 深复制

    深克隆和浅克隆:

    浅克隆:只对对象进行表层的复制,所谓表层就是只复制对对象进行值复制,对象中的引用类型,复制其引用地址。其实现通过对象的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
    收藏
    关注
    评论
  • 相关阅读:
    贮油点问题(C++)
    二维数组操作
    二的幂次方(递归)
    [haoi2009]巧克力
    距离最远的牛
    ssh注解basedao简单的实现
    @service中构造方法报错
    spring注解 构造函数问题
    json与gson
    AsyncTask异步类的简单操作
  • 原文地址:https://www.cnblogs.com/Joy-et/p/4364062.html
Copyright © 2011-2022 走看看