|
|
1
25
因为这不会执行深度克隆,这是 通常 克隆人真正需要的是什么。假设您有一个对数组或列表的引用。。。简单地复制 你的目标 将只克隆引用。对数组的任何更改都将通过克隆以及原始对象可见,因此这两个对象仍然是连接的,这违反了克隆的正常点。
非常 |
|
2
8
这里的问题是
或者一个对象可以有某种类型的ID字段,在构造函数中生成——同样,当您克隆它时,您会得到两个具有相同ID的对象,这可能会导致假设ID是唯一的方法中出现各种奇怪的失败。
或者说,您有一个打开套接字或文件流的对象,并存储对该对象的引用。
简而言之,“克隆”并不是一种针对任意对象的定义良好的操作。事实是
|
|
|
3
4
有(至少)两种克隆。大多数参考文献都谈到 浅的 和 关键问题是“应该复制多少”和“应该共享多少”之间的紧张关系。
考虑一个
如果你想
只是复制内存块
“我会给你一个新的
很明显,你不想和别人分享
一般来说,这是一个棘手的问题——这就是为什么要由单个对象来实现 适合他们的情况的语义 .
最后一点:即使我创造了
|
|
|
4
2
有这样一件事 Object.MemberwiseClone(), 和你描述的一样。它正在制作对象的浅拷贝。 它不会自动进行深度克隆。。。您需要手动调用所有成员对象上的克隆,等等。 |
|
|
5
0
您必须显式地实现 ICloneable 类中的接口。 然而,正如文件所述,克隆机制 MemberwiseClone 不区分浅拷贝和深拷贝。 |