浅度赋值 和 深度复制

浅度复制

  当对一个对象进行浅度复制的时候,对于值类型成员,会复制其本身;对于引用类型成员,仅仅复制引用。复制后的对象和原先对象成了“连体婴”,它们的引用成员字段依然引用堆上的同一个对象。

  可以推出这样一个结论:当复制一个结构类型成员时,直接创建一个新的结构类型变量,然后对它赋值,就相当于进行了一个浅度复制。

  如果是引用类型,可以实现ICloneable接口。在Clone方法中,调用受保护的MemberwiseClone()方法。

public object Clone()
{
    return MemberwiseClone();
}

深度复制

  深度复制就是对所有成员都创建一个新的副本。

  深度复制根据复制的对象,可能会变得非常复杂。可以利用序列化/反序列化来对对象进行深度复制:先把对象序列化到内存中,然后再进行反序列化。不过要注意,所有相关对象都必须使用Serializable特征进行标记。

public object Clone()
{
    BinaryFormatter bf = new BinaryFormatter();
    MemoryStream ms = new MemoryStream();
    bf.Serialize(ms, this);
    ms.Position = 0;
    return bf.Deserialize(ms);
}

 

posted @ 2014-04-20 17:33  LieuJoey  阅读(199)  评论(0编辑  收藏  举报