为什么C#/ .Net不使用克隆范式?

时间:2013-01-10 11:54:50

标签: c# .net programming-languages

我很惊讶在C#中复制集合对象会非常麻烦,特别是如果你想要一个深层复制。有没有一个很好的设计理由为什么.Net没有采用Java clone()路由,是否有一些我在C#/ .Net中错过的等价范例?

1 个答案:

答案 0 :(得分:7)

浅层副本

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

深层副本

对于深层副本,Microsoft建议实施自定义Copy方法。深层拷贝需要关于类本身的复杂知识 - 实际上,对于给定的类,甚至可以制作多种不同类型的深拷贝。因此,没有用于此目的的预定义方法或接口。

但是ICloneable界面呢?

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