写在前面
最近两天,对"树(tree)"进行搜索,将搜索到的结果进行简单处理,并相应的改变样式。因为tree从session中取值,故而每次搜索后处理的结果都会都会改变原有session值。此时,不得不使用“深度复制”的方式去解原数据被修改的问题。
关于浅拷贝与深拷贝
定义
浅拷贝(Shallow Copy)
只复制对象的基本类型、对象类型,仍属于原来的引用。
深拷贝(Deep Copy)
不仅复制对象的基本类型,同时也复制对象的数据,完全产生新对象,是克隆的过程。
区别
浅表复制只复制值类型的值,而对于实例所包含的对象依然指向原有实例。
浅拷贝
1.浅拷贝code
public Person ShallowCopy(){
return this.MemberwiseClone() as Person;//MemberwiseClone:将当前对象浅拷贝一份。
}
2.调用
Person person=new Person(); person.name="张三"; person.age=18; person.email="1234567890@qq.com; //浅拷贝 Person person2=person.ShallowCopy();
深拷贝
1.深拷贝code:
public static IList<T> Clone<T>(IList<VehicleTreeModel> list)
{
BinaryFormatter formatter = new BinaryFormatter();
using (MemoryStream memorystream = new MemoryStream())
{
formatter.Serialize(memorystream, list);
memorystream.Position = 0;
return formatter.Deserialize(memorystream) as List<T>;
}
}
2.序列化标识
#+BEGIN_SRC
[Serializable]
public class VehicleTreeModel : CompanyModel
{
...
}
[Serializable]
public class CompanyModel
{
...
}
3.调用
IList<VehicleTreeModel> deepCopyList = Clone<VehicleTreeModel>(list);
参考资料
http://blog.csdn.net/flyingdream123/article/details/9294973 http://blog.csdn.net/xjavasunjava/article/details/7648242 https://en.wikipedia.org/wiki/Object_copy
结语
此次完全理解了浅度复制和深度复制,并应用于实际当中。