zoukankan      html  css  js  c++  java
  • 深拷贝和浅拷贝

    浅拷贝:

    值类型copy:原值修改不影响copy值。(注:在浅拷贝的时候我们把字符串看成值类型)

    引用类型copy:copy的内容是引用类型的引用地址,当原对象发生改动时copy对象也发生改动。

    深拷贝:

    和浅拷贝相比,区别在于引用类型对象的复制,是将引用复制到新创建的对象中,原对象的改变不会影响复制对象。

    深拷贝和浅拷贝代码示例:

        class Studens : ICloneable
        {
            public string Name { get; set; }
            public int Age { get; set; }
            /// <summary>
            /// 浅Clone
            /// </summary>
            /// <returns></returns>
            public object Clone()
            {
                return this.MemberwiseClone();
            }
    
    
            /// <summary>
            /// 深Clone
            ///    深克隆有很多种方式,最简单的就是对对象的每个字段进行挨个赋值,但是一旦Clone对象的字段发生改变的时候Clone方法也要发生改变,非常的不方便和易发生错误。
            ///    在这里我们选择的是序列化Clone的方式
            /// </summary>
            /// <returns></returns>
            public object Clone()
            {
                //新建一个内存流
                using (Stream streamObj = new MemoryStream())
                {
                    //声明二进制格式化对象
                    IFormatter formatter = new BinaryFormatter();
                    //开始序列化
                    formatter.Serialize(streamObj, this);
                    //设置当前流的位置,即开始位置。像是一个标识一样,即指向开始读取的位置。( SeekOrigin.Begin流开始的位置,0:偏移位置)
                    streamObj.Seek(0, SeekOrigin.Begin);
                    //最后反序列化,返回对象
                    return formatter.Deserialize(streamObj) as Studens;
                }
            }
        }
  • 相关阅读:
    Switch开关按钮控件----------WinForm控件开发系列
    图片旋转播放控件----------WinForm控件开发系列
    谷歌密码查看器
    Tarjan求LCA
    [题解]Hankson的趣味题
    [NOI Online]文具订购
    二分图判定
    hash表
    KMP算法
    拓扑排序入门
  • 原文地址:https://www.cnblogs.com/scyr/p/7472602.html
Copyright © 2011-2022 走看看