C#關於Clone()方法的介紹


日常啪啪啪代碼的時候,常常遇到淺復制與深復制的問題,下面就自己經驗寫寫,有問題請留言!

例如我有一個簡單的類:

class People
{
    public int _age;
    public string _name;
    public People(int Age,string Name)
    {
    _age = Age;
    _name = Name;
    }
}

常見的賦值語句,如:

People Mike = new People(12,"Mike");
People Mike2 = Mike;

這是淺復制,共享同一塊內存,類似指針,即Mike2與Mike對象同時指向了Mike新建時所申請的內存。
現在我為People類增加一個Clone()方法:

class People
{
    public int _age;
    public string _name;
    public People(int Age,string Name)
    {
        _age = Age;
     _name = Name;
    }
    public object Clone()
    {
        People MySelf = new People(this._age,this._name);
        return MySelf;    }
}

很明顯,調用Clone()方法返回的對象是一個全新的對象,是新實例化出來的對象但是與原對象在值上相等。

People Mike = new People(12,"Mike");
People Mike2 = Mike;
People Mike3 = Mike.Clone() as People;

Mike2與Mike3在值上相等,但實際是完全獨立的對象。

Mike2._name = "Jone";
//執行上述代碼后,Mike的_name屬性跟着改變了,而Mike3不變。

 


免責聲明!

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



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