1. 程式人生 > >深拷貝與淺拷貝---《編寫高質量程式碼改善C#程式的157個建議》筆記

深拷貝與淺拷貝---《編寫高質量程式碼改善C#程式的157個建議》筆記

1.定義:

淺拷貝:將物件所有欄位複製到新物件(副本)中,其中,值型別的值被複制到副本中之後,在副本中的修改不會影響源物件的值;而引用型別欄位被複制到副本中的是引用型別的引用,而不是引用的物件,在副本中對引用型別欄位的修改會影響到源物件本身。

深拷貝:將物件中的所有欄位複製到新物件中,不過無論是值型別還是引用型別都會被重新建立並賦值,對於副本的修改不會影響到源物件本身。

2.注意:

無論淺拷貝還是深拷貝,都建議使用型別繼承ICloneable介面的方式明確告訴呼叫者;該型別可以被拷貝;ICloneable介面只提供一個申明為Clone()的方法,可根據需求在Clone()方法中實現深拷貝或者淺拷貝。

一個簡單淺拷貝程式碼如下:

理論上string是引用型別,但由於該引用的特殊性,Object.MemberwiseClone方法仍舊為其建立副本,也就是說淺拷貝過程中,我們應該講字串看做是值型別。

3

4.