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
    收藏
    关注
    评论
  • 相关阅读:
    visual studio code for mac 的对齐快捷键
    ios 抓取真机的网络包
    iOS 引入framework的常见问题和原理
    iOS 4种开发者身份的官方说明
    iOS NSObject 的 isa 属性的类型 Class
    iOS 子类初始化方法中 为什么要使用 self = [super init] 对self进行赋值
    Linux和windows下修改tomcat内存
    idea将项目打成war包
    web.xml引入 xml (tomcat 7.0.52) 以上版本报错
    ideal 切换git和svn
  • 原文地址:https://www.cnblogs.com/Joy-et/p/4364062.html
Copyright © 2011-2022 走看看