平常啪啪啪代碼的時候,經常遇到淺複製與深複製的問題,下面就本身經驗寫寫,有問題請留言!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不變。