大多数稍微有过一些编程实践的C#初学者都应该听说过“浅层复制”和“深层复制”的区别,如果尚不清楚的盆友还是先去搜索一下相关的专题,我在这里不多说,本文主要内容是记录一下区别于前两者的另外一种在有较复杂的类层次情况下的复制方式。
比如有如下类的声明:(代码1)
public class ClassOne
{
public int Value = 0;
}
public class ClassTwo : ICloneable
{
private ClassOne inner = new ClassOne();
public object Clone()
{
return this.MemberwiseClone();
}
}
即第二个类将第一个类作为私有成员进行封装。此时若直接调用ClassTwo对象的Clone()方法则实际上是进行了ClassTwo的浅层复制。
如果想通过Clone()方法进行深层复制,则需要进行如下修改:(代码2)
public class ClassOne
{
public int Value = 0;
}
public class ClassTwo : ICloneable
{
private ClassOne one = new ClassOne();
public object Clone()
{
ClassTwo clone = (ClassTwo)this.MemberwiseClone();
clone.one = new ClassOne();
clone.one.Value = this.one.Value;
return clone;
}
}