从MSDN文档中,我并不清楚在实现ICloneable接口时应该提供深克隆还是浅克隆。哪种选项更好呢?
简短回答:是的。
长篇回答:不要使用 ICloneable 接口。这是因为 .Clone 方法没有定义其是浅克隆还是深克隆。你应该实现自己的 IClone 接口,并描述如何进行克隆操作。
克隆默认是深度的,这是命名约定,如果出于性能原因,复制构造函数可以是浅层的。
编辑:这个命名约定超越了边界,它适用于 .Net、Java、C++、Javascript 等等...实际源头超出了我的知识范围,但它是标准面向对象词汇的一部分,就像对象和类一样。因此,MSDN 不指定实现,因为这是单词本身的含义(当然,很多新手对面向对象语言不了解这一点,他们应该指定它,但再说一遍,他们的文档也相当节俭)。