日常啪啪啪代碼的時(shí)候,常常遇到淺復(fù)制與深復(fù)制的問題,下面就自己經(jīng)驗(yàn)寫寫椅亚,有問題請(qǐng)留言!
例如我有一個(gè)簡(jiǎn)單的類:
···
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;
這是淺復(fù)制呀舔,共享同一塊內(nèi)存,類似指針,即Mike2與Mike對(duì)象同時(shí)指向了Mike新建時(shí)所申請(qǐng)的內(nèi)存扩灯。
現(xiàn)在我為People類增加一個(gè)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; }
}
···
很明顯媚赖,調(diào)用Clone()方法返回的對(duì)象是一個(gè)全新的對(duì)象,是新實(shí)例化出來的對(duì)象但是與原對(duì)象在值上相等珠插。
People Mike = new People(12,"Mike");
People Mike2 = Mike;
People Mike3 = Mike.Clone() as People;
Mike2與Mike3在值上相等惧磺,但實(shí)際是完全獨(dú)立的對(duì)象。
Mike2._name = "Jone";
//執(zhí)行上述代碼后捻撑,Mike的_name屬性跟著改變了磨隘,而Mike3不變。