关于C#的深拷贝

简单点说:1.浅拷贝:就是把一个类型的所有字段的值都赋值一遍·值类型和引用类型的值都拷贝一份,引用类型的值为原对象引用所指向的地址,所以修改会把原来对象的引用指向值所改变。(string是特殊的类·当作值类型来使用 就是非引用类型)

2.深拷贝:就是把引用类型所指向的类容也一起拷贝一份,修改起指向不会更改原来引用指向的值。

 

这里就来说说深拷贝的实现方式:

第一种就是序列化方法:可以继承ICloneable实现其接口Clone

[Serializable]//如果不把CardData加上序列化标识则无法序列化

public class CardData : ICardData , ICloneable
{

/// <summary>
/// 深拷贝
/// </summary>
/// <returns></returns>
public object Clone()
{
using(Stream objectStream = new MemoryStream())
{
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(objectStream, this);
objectStream.Seek(0, SeekOrigin.Begin);
return formatter.Deserialize(objectStream) as CardData;
}
}

 

还有一种办法就写一个新的构造函数

public CardData(ICardData card)
{

//依次赋值所有字段如果 字段很多的话就非常蛋疼

}

转载于:https://www.cnblogs.com/arthurwc/p/5007843.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值