C# ASP.NET 之浅拷贝与深拷贝

发布于 2024-04-29 12:46:46 字数 1886 浏览 23 评论 0

最近两天,对 树(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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

虚拟世界

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

玍銹的英雄夢

文章 0 评论 0

我不会写诗

文章 0 评论 0

十六岁半

文章 0 评论 0

浸婚纱

文章 0 评论 0

qq_kJ6XkX

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文