浅度赋值 和 深度复制

浅度复制

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

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

  如果是引用类型,可以实现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);
}

 

转载于:https://www.cnblogs.com/JoeyLieu/p/3676721.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值