public void Run() { Student s1 = new Student("Vivi", 28); Console.WriteLine("s1=[" + s1 + "]"); Student s2 = (Student)s1.ShallowCopy(); //Student s2 = (Student)s1.DeepCopy(); Console.WriteLine("s2=[" + s2 + "]"); //此处s2和s1内容相同 Console.WriteLine("-----------------------------"); //修改s2的内容 s2.Name = "tianyue"; s2.Age = 25; s2.Room.RoomID = 2; s2.Room.RoomName = "Room2"; Console.WriteLine("s1=[" + s1 + "]"); Console.WriteLine("s2=[" + s2 + "]"); //浅拷贝时两个对象并未完全“分离”,改变顶级对象的内容,不会对另一个对象产生影响, //但改变子对象的内容,则两个对象同时被改变。 //深拷贝时两个对象是完全“分离”的,改变其中一个,不会影响到另一个对象; //这种差异的产生,即是取决于拷贝子对象时复制内存还是复制指针。深拷贝为子对象重新分配了一段内存空间,并复制其中的内容; //浅拷贝仅仅将指针指向原来的子对象。 Person person = new Person(); person.Name = new Name("deng", "li"); person.Age = 123; person.Address = "ChengDu"; //Person p2 =(Person)person.Clone(); Person p2 = person.Clone(true); p2.Age = 100; p2.Name = new Name("Zhang", "San"); p2.Address = "SG"; //再次打印两个对象以比较 //Console.ReadLine(); }
public object DeepCopy() { Student s = new Student(); s.Name = this.Name; s.Age = this.Age; s.Room = (ClassRoom)this.Room.DeepCopy(); return s; }