public Object Clone() { Resume obj = new Resume(this.work); obj.name = this.name; obj.sex = this.sex; obj.age = this.age; return obj; }
static void Main(string[] args) { Resume r1 = new Resume(); r1.Name = "小明"; r1.Age = 20; r1.Work = new WorkExperence("程序员","2010"); Resume r2 = (Resume)r1.Clone(); r2.Name = "张建"; r2.Work.Work = "老师"; r2.Work.Time = "1992"; r2.Display(); r1.Display(); }
static void Main(string[] args) { Resume a = new Resume("大鸟"); a.SetPersonalInfo("男", "29"); a.SetWorkExperience("1998-2000", "XX公司"); Resume b = (Resume)a.Clone(); b.SetWorkExperience("1998-2006", "YY企业"); Resume c = (Resume)a.Clone(); c.SetPersonalInfo("男", "24"); a.Display(); b.Display(); c.Display(); Console.Read(); }
// MemberwiseClone() 这个是浅拷贝,如果是值就直接拷贝值,如果是引用,则拷贝引用,而非拷贝具体引用指向的对象。 // 如果Resume类中还有另外一个类,比如叫工作经历WorkExperence,想实现深拷贝,需要2步工作 // 1.WorkExperence需要实现的IClone接口。 // 2.在Resume类中自己写拷贝,不调用MemberwiseClone()。 public object Clone() { // 浅拷贝方法 // return (object)this.MemberwiseClone(); // 深拷贝方法 Resume r = new Resume(); r.Name = this.Name; r.Age = this.Age; // 由于这里使用到了赋值,所以WorkExperence必须实现浅拷贝,否则则是引用赋值。 r.Work = this.Work; return r; }