C#的深拷贝和浅拷贝

freewiller_29 2005-11-17 07:53:05
public class BombRoom : Room
{
private int _bombHave;

public BombRoom(int roomNo, int bombHave) : base(roomNo)
{
_roomNo = roomNo;
_bombHave = bombHave;
}

public BombRoom(BombRoom room) : base(room._roomNo)
{
_bombHave = room._bombHave;
_roomNo = room._roomNo;
}

public override Room Clone()
{
return new BombRoom(this);
}
public override Room Clone()
{
return new BombRoom(this._roomNo, this._bombHave);
}
}
有谁能告诉我为什么第一个Clone实现的是浅拷贝,而第二个实现的是深拷贝。
...全文
291 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
LGame 2005-11-18
  • 打赏
  • 举报
回复
学习了
freewiller_29 2005-11-18
  • 打赏
  • 举报
回复
好象,dreamingnet(刀刀)说的蛮有道理的,room BombRoom(是引用类型), 所以如果用c++解释,就是说两个指针指向一个地址。c++里可以用拷贝构造函数解决,c#里又该怎么办呢,如果我非要传个类进去?
cjzlxy 2005-11-18
  • 打赏
  • 举报
回复
晕的好.
第一个clone复制后两个room,无论怎么改,两个都是一样,这就是浅拷贝.它只是将引用传给了第二个对象.
第二个clone,修改后两个不一样,这就是深拷贝.它复制了整个对象.
freewiller_29 2005-11-18
  • 打赏
  • 举报
回复
晕了,第一个Clone复制两个room后,无论怎么改,两个都是一样的。而第二个Clone复制两个room后,分别修改,两个room是不一样的。
ChengKing 2005-11-18
  • 打赏
  • 举报
回复
浅Copy非常危险,它会使两个指针同时指向同一个地址。当修改一个值时,另一个指针指向的
地址也跟着变化.

如果用的多了,不好控制
pshy 2005-11-18
  • 打赏
  • 举报
回复
应该是值类型和引用类型的参数区别吧!
erictang2003 2005-11-18
  • 打赏
  • 举报
回复
浅拷贝
copy1--element0--copy2
|-element1-|
|-element2-|
|-element3-|
|-element4-|


深拷贝
copy1--element0 copy2--element0
|-element1 |-element1
|-element2 |-element2
|-element3 |-element3
|-element4 |-element4

掐死温柔 2005-11-18
  • 打赏
  • 举报
回复
LZ干脆用COPYTO得了
seekg 2005-11-18
  • 打赏
  • 举报
回复
旁听
tiaoci 2005-11-18
  • 打赏
  • 举报
回复
大家都在胡说些什么啊
tiaoci 2005-11-18
  • 打赏
  • 举报
回复
这两个有区别吗?
dreamingnet 2005-11-18
  • 打赏
  • 举报
回复
原因是roomNo,bombHave是int (是值类型),
而room BombRoom(是引用类型), 它的room._bombHave, room._bombHave都会在集成堆上分配空间,而roomNo,bombHave是int (是值类型)测不会...
web_gus 2005-11-18
  • 打赏
  • 举报
回复
ref参数
runrunrun 2005-11-17
  • 打赏
  • 举报
回复
你的类里面没有引用类型的变量,两种实现的效果应该一样吧
xfxf521 2005-11-17
  • 打赏
  • 举报
回复
通俗的讲浅拷贝是你的引用指向了你要复制对象的引用,这就是来年感个引用指向了同一个对象
而深拷贝是你的引用指向了你自己重新生成的对象,它的值和原对象相同
renyu732 2005-11-17
  • 打赏
  • 举报
回复
给你看一下概念吧:
浅拷贝是指当对象的字段值被拷贝时,字段引用的对象不会被拷贝。
深拷贝是对对象实例中字段引用的对象也进行拷贝的一种方式。

110,568

社区成员

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

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

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