A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© -淡然一笑 中级黑马   /  2014-1-17 13:45  /  1228 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 -淡然一笑 于 2014-1-22 12:53 编辑

大家谈谈 C# 中深复制和浅复制?

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

3 个回复

正序浏览
浅拷贝:是指将对象中的所有字段逐字复杂到一个新对象 ,重要的是区分引用对象的类型,如果是值类型,改变目标对象中值类型字段的值不会反映到原始对象中;如果是引用类型,改变目标对象中引用类型字段的值它将反映到原始对象中,因为拷贝的只是指向原始数据的一个地址。
深拷贝:深拷贝与浅拷贝不同的是对于引用字段的处理,深拷贝不是只复制一个地址,而是直接建立一个与原始数据相同的副本,无论是值类型还是引用类型,执行深拷贝后副本中的数据改变都不影响原始数据。
浅复制: 实现浅复制需要使用Object类的MemberwiseClone方法用于创建一个浅表副本  
深复制: 须实现 ICloneable接口中的Clone方法,且需要需要克隆的对象加上[Serializable]特性

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

回复 使用道具 举报
浅复制就是只复制对象本身,但对象引用的数据是不复制的,是共享的。
深复制就除了复制对象本身,引用的其他对象也会一起复制。

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

回复 使用道具 举报
浅层拷贝,就是只拷贝类的第一层成员,而且如果成员是引用类型,则引用同一份。

深层拷贝,把对象引用的所有直接、间接的对象都拷贝一份。完全的一份拷贝。如果实现深层拷贝?需要耐心或者使用IO流

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马