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. 爲什麼PHP類克隆
- 2. 爲什麼克隆不起作用?
- 3. jquery克隆多個實例爲什麼
- 4. 爲什麼克隆MS-Access記錄集?
- 5. 爲什麼Java枚舉不可克隆?
- 6. 爲什麼使用git協議克隆項目沒有反應?
- 7. 如何使用http來克隆克隆?
- 8. 什麼是克隆的實際用法
- 9. 什麼時候Perl 6數組克隆不是克隆?
- 10. 如何使用使用ssh-agent的maven克隆克隆?
- 11. 爲什麼克隆repo會破壞我的yii2應用程序?
- 12. 添加新元素時應該使用克隆嗎?什麼時候應該使用克隆?
- 13. 我git克隆,現在什麼?
- 14. 複製和克隆有什麼區別?
- 15. 什麼是'線程限制'克隆?
- 16. 什麼是數據庫克隆?
- 17. 複製.hg文件夾和使用克隆有什麼區別?
- 18. GIT在克隆和推送時使用什麼HTTP協議?
- 19. 克隆或不克隆
- 20. 爲什麼克隆方法不能在正在構建的克隆上調用任何非最終方法
- 21. 使用數組 - 克隆
- 22. 使用ssh克隆Git Repositroy
- 23. 使用tf.contrib.graph_editor克隆網絡
- 24. 通過使用克隆()
- 25. 爲什麼當我克隆/複製gameobject內存使用率達到98%?
- 26. 當我修改克隆的obj(使用{...})時,爲什麼obj會發生變異?
- 27. 用例克隆()
- 28. 克隆行爲 - 無法爲克隆設置屬性值?
- 29. 使用jQuery克隆函數克隆功能
- 30. Could not克隆使用jQuery克隆地圖的圖像瓷磚
從定義中不清楚嗎? ;-) – 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