ICloneable介面的淺拷貝與深拷貝

2021-06-02 21:02:58 字數 587 閱讀 3405

icloneable介面支援轉殖,即用與現有例項相同的值建立類的新例項。

icloneable 介面包含乙個成員 clone,它用於支援除 memberwiseclone (建立當前 object的淺表副本)所提供的轉殖之外的轉殖。msdn上給出memberwiseclone方法的解釋是memberwiseclone 方法建立乙個淺表副本,方法是建立乙個新物件,然後將當前物件的非靜態字段複製到該新物件。

如果欄位是值型別的,則對該字段執行逐位複製。

如果欄位是引用型別,則複製引用但不複製引用的物件;因此,原始物件及其複本引用同一物件。

下面先介紹下有關轉殖、 深與淺副本,1.淺拷貝:將物件的字段複製到副本(新的物件)中,同時將字段的值也賦值過去,但是引用型別欄位只複製引用,而不是引用型別本身。這意味著,源物件引用型別欄位的值改變了,會影響到副本中對應的值也改變;2.深拷貝:將物件的字段複製到副本(新的物件)中,無論是值型別還是引用型別字段,都會複製型別本身及型別的值。這意味著,源物件引用型別欄位的值改變了,不會影響到副本中對應的值。

那麼實現了icloneable介面的中的clone是淺拷貝還是深拷貝呢?官方的解釋是:你既可以在clone方法中實現淺拷貝,也可以實現深拷貝。

js 淺拷貝直接賦值 js的賦值與淺拷貝 深拷貝

昨天翻了下陣列api,看到concat和slice方法,突然想到這個兩個方法是淺拷貝還是深拷貝,結果陷入了死胡同,為什麼mdn文件說是淺拷貝,但進行簡單的操作為什麼能複製成功啊,糾結半天後才弄清原由,原來我一直把賦值和深淺拷貝搞混了。首先不要把引用型別的賦值歸結為淺拷貝,深拷貝和淺拷貝只針對像 ob...

介面的設計

佘士東 08 41 47 我設計乙個介面,其中有些方法很類似,比如取得某個工作物件,有可能需要獲得多個,也有可能獲得其中乙個,引數為工作物件的名字 名字列表。我是用窄介面還是寬介面好,是用乙個最大功能的方法還是多個過載方法好?比如 iservice public worker getworker s...

介面的意義

外掛程式式框架作為乙個高耦合低聚合的系統,它的功能定義與功能實現之間是分離的,這種策略是高耦合實現的保證。外掛程式式框架好像乙個功能聚集站,它對外界宣布,只要符合它發布的某種規範的元件 實現介面的類通常稱為元件 都可以加入到這個平台中,而這些元件到底是做什麼事情的,框架並不關心,當然,框架也提供了一...