您是第欢迎光临我的主页位访客
浩凡儿
天行健,君子以自强不息;地势坤,君子以厚德载物!

先说下概念:

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

 

运行结果:

posted on 2012-02-23 11:21  浩凡儿  阅读(210)  评论(0编辑  收藏  举报