我很惊讶在C#中复制集合对象会非常麻烦,特别是如果你想要一个深层复制。有没有一个很好的设计理由为什么.Net没有采用Java clone()路由,是否有一些我在C#/ .Net中错过的等价范例?
答案 0 :(得分:7)
浅层副本
对于浅拷贝,.NET提供Object.MemberwiseClone。
深层副本
对于深层副本,Microsoft建议实施自定义Copy
方法。深层拷贝需要关于类本身的复杂知识 - 实际上,对于给定的类,甚至可以制作多种不同类型的深拷贝。因此,没有用于此目的的预定义方法或接口。
但是ICloneable界面呢?
有ICloneable interface,其目的可能大致对应于Java的Object.clone
。但是,Microsoft advises against its use,因为它没有指定副本需要多么浅或深才能正确实现接口。