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

平常啪啪啪代碼的時候,經常遇到淺複製與深複製的問題,下面就本身經驗寫寫,有問題請留言!this

例如我有一個簡單的類:spa

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()方法:code

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在值上相等,但實際是徹底獨立的對象。blog

Mike2._name = "Jone";
//執行上述代碼後,Mike的_name屬性跟着改變了,而Mike3不變。
相關文章
相關標籤/搜索