3 回答

TA貢獻1796條經(jīng)驗 獲得超7個贊
你不應(yīng)該 Microsoft建議不要實施,ICloneable因為在界面上沒有明確指示您的Clone方法是執(zhí)行“深層”克隆還是“淺層”克隆。

TA貢獻1788條經(jīng)驗 獲得超4個贊
該ICloneable
接口本身并不是很有用,也就是說,實際上在很多情況下,知道一個對象是可克隆的而不知道其他任何信息都是有用的。這種情況與例如IEnumerable
or 截然不同IDisposable
。在許多情況下,接受一個有用的信息IEnumerable
而不是除枚舉它以外的任何事情都是有用的。
另一方面,ICloneable
當與其他約束一起用作一般約束時,這可能會很有用。例如,基類可能有用地支持許多派生類,其中一些可以被有用地克隆,而另一些則不能。如果基本類型本身公開了公共克隆接口,則任何無法克隆的派生類型都將違反Liskov替換原理。避免此問題的方法是讓基本類型支持使用Protected方法的克隆,并允許派生類型在合適的情況下實現(xiàn)公共克隆接口。
完成此操作后,可以將想要接受某種WonderfulBase
類型的對象并且需要能夠克隆它的方法進行編碼,以接受支持克隆的WonderfulBase對象(使用具有基本類型和ICloneable
約束的通用類型參數(shù)) 。盡管該ICloneable
接口本身并不表示深克隆或淺克隆,但有關(guān)文檔WonderfulBase
將指出WonderfulBase
可克隆對象應(yīng)是深克隆還是淺克隆。本質(zhì)上,該ICloneable
接口不會完成定義所無法實現(xiàn)的任何事情ICloneableWonderfulBase
,只是該接口可以避免必須為每個不同的可克隆基類定義不同的名稱。

TA貢獻1802條經(jīng)驗 獲得超5個贊
ICloneable
是BCL中存在爭議的工件之一。恕我直言,沒有真正的理由來實施它。這樣說來,如果我要創(chuàng)建一個克隆方法,那么我會實現(xiàn)ICloneable
,并且提供我自己的強類型版本的Clone
。
問題ICloneable
是它從未表明Clone
是淺拷貝還是深拷貝,它們是完全不同的東西。沒有任何事實ICloneable<T>
可能表明微軟對ICloneable的想法
- 3 回答
- 0 關(guān)注
- 1414 瀏覽
添加回答
舉報