您的位置:首页 > 其它

深度复制与浅度复制

2014-05-06 17:53 197 查看
浅度复制:只是复制类的值类型字段和引用类型字段的引用

深度复制:即完全复制过来,不管里面的值类型字段还是引用类型字段,是构成一个全新的一模一样的对象。

代码:

[Serializable]
public class PersonInfo
{
public string Name{get;set;}
public int Age{get;set;}
}

[Serializable]
public class Person : ICloneable
{
public PersonInfo PersonInfo { get; set; }
public Person(PersonInfo personInfo)
{
this.PersonInfo = personInfo;
}

/// <summary>
/// 浅度克隆
/// </summary>
/// <returns></returns>
public Person ShallowClone()
{
return this.MemberwiseClone() as Person;
}

/// <summary>
/// 深度复制(实现ICloneable接口的方法)
/// </summary>
/// <returns></returns>
public object Clone()
{
PersonInfo perInf = new PersonInfo { Name = this.PersonInfo.Name, Age = this.PersonInfo.Age };
Person per = new Person(perInf);
return per;
}

/// <summary>
/// 第二种深度复制
/// </summary>
/// <returns></returns>
public Person DeepClone()
{
using (var ms = new MemoryStream())
{
var formatter = new BinaryFormatter();
formatter.Serialize(ms, this);
ms.Position = 0;
return (Person)formatter.Deserialize(ms);
}
}
}


引用:深度复制问题..当对象成员有很多引用成员,如何深度复制。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: