• 深拷贝和浅拷贝


    浅拷贝:

    值类型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;
                }
            }
        }
  • 相关阅读:
    Netty入门——客户端与服务端通信
    使用配置文件自定义Ribbon配置
    使用Java代码自定义Ribbon配置
    Spring Cloud Ribbon入门
    负载均衡简介
    常见的几种负载均衡算法
    Eureka编程
    Eureka多机高可用
    Maven项目打包成可执行Jar文件
    Eureka单机高可用伪集群配置
  • 原文地址:https://www.cnblogs.com/scyr/p/7472602.html
Copyright © 2020-2023  润新知