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();
            }
        }

    运行结果:

  • 相关阅读:
    vue与laravel
    php artisan 命令
    HTTP 状态码
    PhpStorm提高效率的使用方法及设置
    好RESTful API的设计原则
    laravel 入门基础之安装
    c++ sizeof(字符数组)
    new delete/delete[] 测试
    linux g++ 查找动态链接库
    linux下定时器耗时研究
  • 原文地址:https://www.cnblogs.com/haofaner/p/2364481.html
Copyright © 2011-2022 走看看