C# ASP.NET 之浅拷贝与深拷贝
最近两天,对 树(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
结语
此次完全理解了浅度复制和深度复制,并应用于实际当中。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: C# ASP.NET 线程入门教程
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论