4
A
回答
14
的想法是,使用Clone
您可以創建同一類型的一個調用它,不知道要調用它對象的確切類型的新對象。
例如:
void Test(ICloneable original)
{
var cloned = original.Clone();
}
這裏cloned
相同運行時類型爲original
,而你並不需要知道是什麼類型是執行克隆。
然而ICloneable
用處是非常沒有,因爲它沒有定義語義克隆操作的:它是一個shallow copy或deep copy?由於界面沒有強制要求,你不能真正知道你回來的是什麼。而且由於知道這一點至關重要,因爲你需要相應地處理克隆,所以ICloneable
本身就是一張燒燬的卡片。
使用Clone
方法(具有明確定義的語義)定義自己的接口很有意義。
3
Clone()
通常提供對象的淺副本(即見Array.Clone()),它複製引用而不是引用的對象。
如果你瞭解它的侷限性,主要是在語義的究竟是什麼被複制到新的對象大多留給Clone()
方法的實施者,因爲它定義the Clone()
方法接口ICloneable
正在指定它的方便(所以它可能是淺拷貝或深拷貝,但你不能依賴)。
0
當我們將一個對象的內容拷貝到另一個對象(SomeClass obj2 = obj1)時,obj2也屬於同一個類,修改obj2的內容也會修改obj1的內容。這是因爲它們是參考類型。使用克隆()(以適當的方式)可以避免這種情況。在修改克隆的對象時,原始內容不會被修改。
相關問題
- 1. jQuery Loop?克隆?爲什麼?
- 2. 爲什麼PHP類克隆
- 3. 爲什麼克隆不起作用?
- 4. 爲什麼混帳克隆--recursive克隆分離子模塊
- 5. 爲什麼克隆MS-Access記錄集?
- 6. jquery克隆多個實例爲什麼
- 7. 爲什麼「混帳克隆」試圖
- 8. 爲什麼Java枚舉不可克隆?
- 9. 超級克隆做什麼?
- 10. 爲什麼C#/ .Net使用克隆範例?
- 11. 爲什麼使用git協議克隆項目沒有反應?
- 12. 如何使用http來克隆克隆?
- 13. 什麼是克隆的實際用法
- 14. 什麼時候Perl 6數組克隆不是克隆?
- 15. 克隆遠程分支導致克隆所有遠程分支...爲什麼?
- 16. 使用git克隆git不能克隆回購:// ... - 使用git克隆http://
- 17. 克隆系統調用後爲什麼重新分配死鎖?
- 18. 爲什麼克隆repo會破壞我的yii2應用程序?
- 19. 如何使用使用ssh-agent的maven克隆克隆?
- 20. 添加新元素時應該使用克隆嗎?什麼時候應該使用克隆?
- 21. 什麼是數據庫克隆?
- 22. 什麼是克隆對象的instanceof?
- 23. 我git克隆,現在什麼?
- 24. 從git克隆回購後做什麼
- 25. 什麼是'線程限制'克隆?
- 26. 複製和克隆有什麼區別?
- 27. 什麼是淺克隆的限制
- 28. 爲什麼javax.xml.xpath.XPath與克隆節點的行爲不同?
- 29. 克隆遠程分支 - 爲什麼git認爲它不存在?
- 30. GIT在克隆和推送時使用什麼HTTP協議?
從定義中不清楚嗎? ;-) – zerkms 2011-03-26 15:47:20
主要目的是創建一個對象的克隆。好處是有重複。還有問題嗎? – Ingo 2011-03-26 15:49:29
[爲什麼我應該在c#中實現ICloneable?](http://stackoverflow.com/questions/699210/why-should-i-implement-icloneable-in-c) – 2011-03-26 15:58:30