深表副本和浅表副本的区别。

sunboy_yf 2010-09-17 08:29:01
各位大侠有关于深表副本和浅表副本的相文章没。
...全文
821 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunboy_yf 2010-09-21
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 sunboy_yf 的回复:]
浅复制和深复制在程序上如何实现那,在此,谢谢各位老师。能不能给举个例子什么的。
[/Quote]
去了他的博客没有看到啊,能给个链接的地址吗,谢谢啊。
加油馒头 2010-09-19
  • 打赏
  • 举报
回复
复制引用 与 复制对象的区别
amandag 2010-09-19
  • 打赏
  • 举报
回复
浅复制与深复制
http://blog.csdn.net/amandag/archive/2010/07/11/5726465.aspx
skyering 2010-09-19
  • 打赏
  • 举报
回复
张子阳的博客中有一篇关于深拷贝和浅拷贝的文章,看了之后还是不懂的找我。
sunboy_yf 2010-09-19
  • 打赏
  • 举报
回复
浅复制和深复制在程序上如何实现那,在此,谢谢各位老师。能不能给举个例子什么的。
xie_xingan 2010-09-18
  • 打赏
  • 举报
回复
举个例子。有一份书的清单,有50本书。只复制清单就是浅表复制,连清单带书一起复印,那就是深表复制。
bourbon1795 2010-09-18
  • 打赏
  • 举报
回复
区别在于对引用的处理。
浅表复制:只复制值类型,引用依旧是以前的引用。
深表复制:不仅复制值类型,引用也复制,即重新构造对象。
边城的刀声 2010-09-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sunboy_yf 的回复:]

引用 4 楼 bclz_vs 的回复:
浅复制就是仅复制类中的值类型成员
深复制就是复制类中的值类型成员和引用类型的成员。
浅复制一般由object.MemberwiseClone自动实现,由于是用反射机制,所以在实现时,最好还是自己来写。
要想实现深复制,则要确保类中的所有引用类型成员都有浅复制的功能,这样就能确保深复制成功

为什么把类中的所有引用类型成员都有浅复制的功能,这样就……
[/Quote]
所以这个得由你自己实现,不能光靠MemberWiseClone()

class myClass : ICloneable
{
int32 a;
public ICloneable b; //任何实现了ICloneable 接口的类型,当然也可以不实现,反正是自己来处理

public object Clone()
{
myClass result =(myClass)MemberwiseClone();//先用默认的把值类型复制过来
result.b = b.Clone();
return result;
}
}



sunboy_yf 2010-09-18
  • 打赏
  • 举报
回复
顶一下。
sunboy_yf 2010-09-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bclz_vs 的回复:]
浅复制就是仅复制类中的值类型成员
深复制就是复制类中的值类型成员和引用类型的成员。
浅复制一般由object.MemberwiseClone自动实现,由于是用反射机制,所以在实现时,最好还是自己来写。
要想实现深复制,则要确保类中的所有引用类型成员都有浅复制的功能,这样就能确保深复制成功
[/Quote]
为什么把类中的所有引用类型成员都有浅复制的功能,这样就能确保深复制成功。
浅表复制:只复制值类型,引用依旧是以前的引用。按照这个的推理的话,即使将类中的所有引用浅复制,
引用还是没有改变啊。能说说其中的原因吗,还是我对浅复制的理解有误。
KissXYL 2010-09-17
  • 打赏
  • 举报
回复
就是个名词,没啥好说的。
浅表复制就是一个引用数组,复制的时候复制引用。
深度复制就是一个数组,复制的时候不止复制引用,而是用现有对象创建新的一摸一样的对象放到目标数组。典型的行为就是一个int[]复制到另一个int[],你总是在深度拷贝,值类型数组都是深度拷贝,引用类型的需要调用Clone方法创建副本。.net 1.0时代拿来忽悠人的概念,知道就行了。
边城的刀声 2010-09-17
  • 打赏
  • 举报
回复
浅复制就是仅复制类中的值类型成员
深复制就是复制类中的值类型成员和引用类型的成员。
浅复制一般由object.MemberwiseClone自动实现,由于是用反射机制,所以在实现时,最好还是自己来写。
要想实现深复制,则要确保类中的所有引用类型成员都有浅复制的功能,这样就能确保深复制成功
chenketang 2010-09-17
  • 打赏
  • 举报
回复
MemberwiseClone 方法创建一个浅表副本,方法是创建一个新对象,然后将当前对象的非静态字段复制到该新对象。如果字段是值类型的,则对该字段执行逐位复制。如果字段是引用类型,则复制引用但不复制引用的对象;因此,原始对象及其复本引用同一对象。

例如,考虑一个名为 X 的对象,该对象引用对象 A 和 B。对象 B 又引用对象 C。X 的浅表副本创建一个新对象 X2,该对象也引用对象 A 和 B。与此相对照,X 的深层副本创建一个新对象 X2,该对象引用新对象 A2 和 B2,它们分别是 A 和 B 的副本。B2 又引用新对象 C2,C2 是 C 的副本。使用实现 ICloneable 接口的类执行对象的浅表或深层复制。
ICloneable 接口包含一个成员 Clone,它用于支持除 MemberwiseClone 所提供的克隆之外的克隆。
porschev 2010-09-17
  • 打赏
  • 举报
回复
帮顶。。没听过。。
whb147 2010-09-17
  • 打赏
  • 举报
回复
没有见过
看来out了

110,580

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧