using System;
using System.Collections.Generic;
public class MyClass
{
class InstanceA : ICloneable
{
public int x;
public InstanceB B;
public InstanceA() { }
public InstanceA(int X, InstanceB b)
{
this.x = X;
this.B = b;
}
object ICloneable.Clone()
{
return this.Clone();
}
public InstanceA Clone()
{
InstanceA A = this.MemberwiseClone() as InstanceA;
A.B = this.B.Copy();
return A; //深复制
// return (InstanceA)this.MemberwiseClone(); //浅复制
//return new InstanceA(this.x,this.B); //use this can't get deep copy too..
}
}
class InstanceB
{
public int y;
public InstanceB Copy()
{
return this.MemberwiseClone() as InstanceB;
}
}
public static void Main()
{
InstanceA obj1 = new InstanceA();
obj1.x = 1;
obj1.B = new InstanceB();
obj1.B.y = 2;
InstanceA obj2 = obj1.Clone();
obj2.x = 3;
obj2.B.y = 4;
Console.WriteLine("Obj1.x is:{0} \t obj1.B.y={1}", obj1.x, obj1.B.y);
Console.WriteLine("Obj2.x is:{0} \t obj2.B.y={1}", obj2.x, obj2.B.y);
Console.ReadLine();
}
}