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

Mr.*_*Boy 2 .net c# programming-languages

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

Hei*_*nzi 7

浅拷贝

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

深拷贝

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

但是ICloneable接口怎么样?

ICloneable接口,其目的可能大致对应于Java Object.clone.但是,Microsoft 建议不要使用它,因为它没有指定副本需要多么浅或深才能正确实现接口.