コード例 #1
0
ファイル: DeepCopy.cs プロジェクト: ChegnduJackli/Projects
        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();
        }
コード例 #2
0
ファイル: DeepCopy.cs プロジェクト: ChegnduJackli/Projects
 public object Clone()
 {
     Person tem = new Person();
     tem.Address = this.Address;
     tem.Age = this.Age;
     tem.Name = new Name(this.Name.FristName, this.Name.LastName);
     return tem;
 }