淺度複製(淺克隆)和深度複製(深克隆)
阿新 • • 發佈:2022-05-21
1.資料型別可以分為兩大類:基本型別和引用型別。
基本型別也稱為值型別,分別是字元型別 char,布林型別 boolean以及數值型別 byte、short、int、long、float、double。
引用型別則包括類、介面、陣列、列舉等。
記憶體空間分為堆和棧。基本型別直接在棧中儲存數值,而引用型別是將引用(地址值)放在棧中,實際儲存的值是放在堆中,通過棧中的引用(地址值)指向堆中存放的資料。
上圖定義的a和b都是基本型別,其值是直接存放在棧中的;而c和d是String宣告的,這是一個引用型別,引用地址是存放在棧中,然後指向堆的記憶體空間。
下面d = c;這條語句表示將c的引用賦值給d,那麼c和d將指向同一塊堆記憶體空間。
2.淺複製:在C#中呼叫 MemberwiseClone() 方法即為淺複製。如果欄位是值型別的,則對欄位執行逐位複製,如果欄位是引用型別的,則複製物件的引用,而不復制物件,因此:原始物件和其副本引用同一個物件!
3.深複製:如果欄位是值型別的,則對欄位執行逐位複製,如果欄位是引用型別的,則把引用型別的物件指向一個全新的物件!