C#之Clone


引用網址: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;
        }
    }
復制代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM