因為類的實例是引用類型,要想用原有的類中的實例的數據的話,既要想創建原對象的一個副本的話,只能用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; } }
