他们明明在什么地方用过,为什么不给出这样的方法?(即使他们没有在任何地方使用它,他们仍然可以给我们这样的方法)。
5 回答
9
可能是因为深度克隆的幼稚实现比有用更危险。如果不加倍小心,很容易意外地克隆整个应用程序堆的大块——包括不应该克隆的东西。在实践中,深度克隆通常是特定于实现的——克隆器知道它在寻找什么,并且只遵循这些路径。
还有 Eric Lippert 的经典答案——他们没有提供它,因为添加简单的东西很难。
于 2011-02-16T21:08:52.593 回答
2
因为每个对象都会有不同的深度克隆行为;有些对象是单例的,根本不可克隆,“深度克隆”的概念对于每个对象来说都不是那么明显。
于 2011-02-16T21:08:49.440 回答
1
深度复制(或克隆)通常并不容易,因为类通常包含对其他类的引用,这些引用可能难以表示为“顺序内存块”并因此复制。这就是为什么它通常通过序列化/反序列化对象来完成:这样你就可以控制实际复制的内容和方式。
如果您有兴趣亲身体验,可以尝试编写自己的序列化程序。这将是一个非常有趣的项目,你会意识到隐藏在这个看似简单的主题背后的许多微妙的——而不是那么微妙的——问题。
于 2011-02-16T21:18:10.090 回答
0
BinaryFormatter 的本机行为实际上是一个深度克隆。自 .NET 1.0 以来就有一个 IClonable 接口,但它已经过时,MS 建议不要实现这个接口,特别是因为担心消费者不一定知道 IClonable 实现是执行深度克隆还是浅层克隆。深度克隆是危险的。
于 2011-02-16T21:11:46.350 回答
0
因为深度克隆的严重性足以保证多个命名空间。请参阅序列化。
于 2011-02-16T21:13:40.827 回答