【问题标题】:Why doesn't C#/.Net use the clone paradigm? [closed]为什么 C#/.Net 不使用克隆范式? [关闭]
【发布时间】:2012-12-24 19:23:35
【问题描述】:

我对在 C# 中复制集合对象非常麻烦感到震惊,尤其是在您想要深度复制的情况下。 .Net 没有采用 Java clone() 路线是否有充分的设计理由,是否有一些我在 C#/.Net 中遗漏的等效范例?

【问题讨论】:

  • 因为 Java 的 clone()不是深拷贝。
  • @John:什么是“新”?你真的能学到“新”的东西吗?也许你可以发现一些新的东西,但你肯定只能学到别人已经发现的东西,因此这不是新的。也许“我不知道!”比较适合……别急,别理我,我是学究模式!
  • @musefan: en.wikipedia.org/wiki/Idiom 听说过他们吗? ;)
  • @MatthewWatson:当然……你真的认为我不明白约翰的意思吗?正如人们所说的那样,我只是在“拉他的腿”

标签: c# .net programming-languages


【解决方案1】:

浅拷贝

对于浅拷贝,.NET 提供Object.MemberwiseClone

深拷贝

对于深拷贝,微软建议实现自定义Copy 方法。深拷贝需要关于类本身的复杂知识——事实上,对于给定的类,制作多种不同类型的深拷贝甚至可能是有意义的。因此,没有为此目的预定义的方法或接口。

但是 ICloneable 界面呢?

ICloneable interface,其用途可能大致对应于Java 的Object.clone。但是,Microsoft advises against its use,因为它没有指定副本需要多浅或多深才能正确实现接口。

【讨论】:

  • 另一种对 SERIALIZABLE 对象进行深度克隆的方法是简单地对其进行序列化,然后将其反序列化为一个新对象。虽然效率很低,但如果速度不是问题,那就没问题了。
  • @MatthewWatson 如果您编写自己的深拷贝代码会快得多,请参阅我上面的链接。
  • 当然自己写会更快。这就是为什么我说“虽然效率很低,但如果速度不是问题就可以了”。 :)
猜你喜欢
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 2014-08-22
  • 2010-09-24
  • 2010-10-22
  • 1970-01-01
  • 2010-11-21
相关资源
最近更新 更多