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;
                }
            }
        }
  • 相关阅读:
    DataList嵌套DataList
    Enterprise Library: Data Access Application Block类设计分析篇
    一些web开发中常用的、做成cs文件的js代码 搜刮来的
    DataList小结
    kill 某个线程
    在JBOSS下发布Web程序
    调整命令行的列数和行数 mode con: cols=100 lines=10000
    了解JavaScript类
    http
    Notepad++文本比较插件:Compare
  • 原文地址:https://www.cnblogs.com/scyr/p/7472602.html
Copyright © 2011-2022 走看看