深度克隆对象

深度克隆对象

我想做的事情如下:


MyObject myObj = GetMyObj(); // Create and fill a new object

MyObject newObj = myObj.Clone();

然后更改未在原始对象中反映的新对象。


我不经常需要这个功能,所以当有必要的时候,我会使用创建一个新对象然后单独复制每个属性,但它总是让我觉得有更好或更优雅的处理方式情况。


如何克隆或深度复制对象,以便可以修改克隆的对象而不会在原始对象中反映任何更改?


幕布斯6054654
浏览 624回答 5
5回答

慕虎7371278

不使用的原因ICloneable是不是因为它没有一个通用的接口。 不使用它的原因是因为它含糊不清。它不清楚你是否得到浅或副本; 这取决于实施者。是的,MemberwiseClone做一个浅的副本,但相反的MemberwiseClone是不是Clone; 或许DeepClone,它可能不存在。当您通过其ICloneable接口使用对象时,您无法知道底层对象执行哪种克隆。(并且XML注释不会说清楚,因为您将获得接口注释而不是对象的Clone方法上的注释。)我通常做的只是制作一个Copy完全符合我想要的方法。

长风秋雁

我更喜欢复制构造函数到克隆。意图更清晰。
打开App,查看更多内容
随时随地看视频慕课网APP