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