引用網址:https://www.cnblogs.com/xbblogs/p/5663827.html?utm_source=itdadao&utm_medium=referral
因為類的實例是引用類型,要想用原有的類中的實例的數據的話,既要想創建原對象的一個副本的話,只能用clone方法。
Clone方法分為深clone和淺clone
在C#中提供了淺clone的方法,即為MemberwiseClone()
class Program
{
static void Main(string[] args)
{
Person p = new Person() { Age=12, Name="張三" };
Person p2 = (Person)p.Clone();
p2.Name = "李四";
Console.WriteLine("p.Name="+ p.Name);
Console.WriteLine("p2.Name=" + p2.Name);
Console.ReadKey();
}
}
public class Person:System.ICloneable
{
public string Name { get; set; }
public int Age { get; set; }
public object Clone()
{
return this.MemberwiseClone();
}
}
輸出結果:

MemberwiseClone()方法執行的只是淺層拷貝。而深層拷貝要遞歸的拷貝其字段所引用的所有對象。
深克隆:即,要在它的每一個包含的類中實現淺Clone
public class DeepClone : System.ICloneable
{
Person g;
Person b;
public Object Clone()
{
DeepClone dc = (DeepClone)this.MemberwiseClone();
dc.g = (Person)(this.g.Clone());
dc.b = (Person)(this.b.Clone());
return dc;
}
}

