第9章 淺度和深度複製

2022-01-14 19:16:44 字數 605 閱讀 7942

第9章  第185頁

從乙個變數到另外乙個變數按值複製物件,而不是按引用複製物件(即以與結構相同的方式複製)可能非常複雜。因為乙個物件可能包含許多其他物件的引用,例如,字段成員等,這將涉及許多繁瑣的操作。把每個成員從乙個物件複製到另外乙個物件中可能不會成功,因為其中一些成員可能是引用型別。

.net framework考慮了這個問題。簡單地按照成員複製物件可以通過派生於system.object的memberwiseclone()方法來完成,這是乙個受保護的方法,但很容易在物件上定義乙個呼叫該方法的公共方法。這個方法提供的複製功能稱為淺度複製,因為它沒有考慮引用型別成員。因此,新物件中的引用成員就會指向與源物件中相同成員的物件,在許多情況下這並不理想。如果要建立成員的新例項,就應複製值,而不複製引用,此時需要使用深度複製。

可以實現乙個icloneable介面,以標準的方式來進行。如果使用這個介面,就必須實現它包含的clone()方法。這個方法返回乙個型別為system.object的值。我們可以採用各種處理方式,執行所選的任何乙個方法體得到這個物件。如果願意,就可以進行深度複製(但執行過程不是必選的,所以可以按照需要執行淺度複製)。詳見第11章

原型模式  protype pattern

第9章 淺度和深度複製

第9章 第185頁 從乙個變數到另外乙個變數按值複製物件,而不是按引用複製物件 即以與結構相同的方式複製 可能非常複雜。因為乙個物件可能包含許多其他物件的引用,例如,字段成員等,這將涉及許多繁瑣的操作。把每個成員從乙個物件複製到另外乙個物件中可能不會成功,因為其中一些成員可能是引用型別。net fr...

深度複製和淺度複製

深度複製和淺度複製的區別在於有沒有為拷貝出的新物件重新分配一塊記憶體區域。淺度拷貝即直接賦值,拷貝的只是原始物件的引用,在堆中仍然公用一塊記憶體,而深度拷貝為新物件在堆中重新分配一塊記憶體,所以對新物件的操作不會影響原始物件 public class person implements clonea...

淺度複製 深度複製

深度複製 deep copy 從乙個變數到另乙個變數按值複製物件,即產生乙個和原物件相同的並且沒有任何引用聯絡的物件。淺度複製 shallow copy 只複製物件的基本型別,而引用型別仍屬於原來的物件。可以使用systrm.object的memberwiseclone 方法來完成,這是乙個受保護的...