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

    先说下概念:

    1:浅复制--》被复制的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。

    2:深复制--》就是把引用对象的变量指向复制过的新对象。

    例子:

    /// <summary>
        /// 工作经历实体类
        /// </summary>
        public class WorkExperience : ICloneable
        {

            #region 私有字段

            private string workDate;
            private string company;
      
       #endregion


            #region 公有属性

            public string WorkDate
            {
                get { return workDate; }
                set { workDate = value; }
            }

            public string Company
            {
                get { return company; }
                set { company = value; }
            }

            #endregion

            /// <summary>
            /// 工作经历类实现Clone方法 
            /// </summary>
            /// <returns>本类的复本Object类型</returns>
            public Object Clone()
            {
                return (Object)this.MemberwiseClone();
            }
        }

        /// <summary>
        /// 简历实体类
        /// </summary>
        public class Resume : ICloneable
        {
            private string name;

            private string sex;

            private string age;

            //引用工作经历类.
            private WorkExperience work;

            public Resume(string name)
            {
                this.name = name;

                //在简历类实例化的同时实例化工作经历类
                work = new WorkExperience();
            }

            /// <summary>
            ///提供Clone方法调用的私有构造函数
            /// </summary>
            /// <param name="work"></param>
            private Resume(WorkExperience work)
            {
                this.work = (WorkExperience)work.Clone();
            }
            /// <summary>
            /// 设置个人信息
            /// </summary>
            /// <param name="sex">性别</param>
            /// <param name="age">年龄</param>
            public void SetPersonalInfo(string sex, string age)
            {
                this.sex = sex;
                this.age = age;
            }
            /// <summary>
            /// 设置工作经历
            /// </summary>
            /// <param name="workDate">工作时间</param>
            /// <param name="company">工作的公司</param>
            public void SetWorkExperience(string workDate, string company)
            {
                work.WorkDate = workDate;
                work.Company = company;
            }
            public void Display()
            {
                Console.WriteLine("个人信息:姓名:{0},性别:{1},年龄:{2}",name,sex,age);
                Console.WriteLine("工作经历:工作时间:{0},工作公司:{1}",work.WorkDate,work.Company);
            }
            public Object Clone()
            {
                Resume obj = new Resume(this.work);
                obj.name = this.name;
                obj.sex = this.sex;
                obj.age = this.age;
                return obj;
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                Resume a = new Resume("孙业宝");
                a.SetPersonalInfo("男","23");
                a.SetWorkExperience("2012.2","上海蓝珀");
                Resume b = (Resume)a.Clone();
                b.SetWorkExperience("2012.10","未知量");
                a.Display();
                b.Display();
                Console.ReadKey();
            }
        }

    运行结果:

  • 相关阅读:
    一笔期货成交的始末(可能有问题)
    tcp心跳模型
    spring boot 2.0 启动监控端点的方法(spring-boot-starter-actuator)
    netty channel的线程安全性与@Sharable
    为什么使用https
    angularjs post 跨域 Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.
    http的keep-alive和tcp的keepalive区别
    最大公约数 最小公倍数--------专题
    hdu 2024 C语言合法标识符
    hdu 2025 查找最大元素
  • 原文地址:https://www.cnblogs.com/haofaner/p/2364481.html
Copyright © 2011-2022 走看看