C#中浅度复制

[复制链接]
查看11 | 回复3 | 2008-8-3 23:10:15 | 显示全部楼层 |阅读模式
class MyCopyableClass

{

protected int myInt;

public int ContainedInt

{

get

{

return myInt;

}

set

{

myInt = value;

}

}

public MyCopyableClass GetCopy()

{

return (MyCopyableClass)MemberwiseClone();

}

static void Main(string[] args)

{

MyCopyableClass obj1 = new MyCopyableClass();

obj1.ContainedInt = 5;

MyCopyableClass obj2 = obj1.GetCopy();

obj1.ContainedInt = 9;

Console.WriteLine(obj2.ContainedInt);

Console.ReadKey();

}

}
}
结果为什么是5阿?明明是浅度复制,应该obj1和obj2指向相同的成员对象。我的理解哪里出问题?谢谢
麻烦解释详细些,还有我怎么改才能让结果是9呢?还有“引用”到底是个什么概念啊?

回复

使用道具 举报

千问 | 2008-8-3 23:10:15 | 显示全部楼层
试试这段代码public class MyCopyableClass1
{
protected int myInt;
public int ContainedInt
{
get
{
return myInt;
}
set
{
myInt = value;
}
}
}
public class MyCopyableClass
回复

使用道具 举报

千问 | 2008-8-3 23:10:15 | 显示全部楼层
浅度复制会复制class中所有ValueType的properties,对于引用类型的数据会使用引用。在上面的例子中,使用的ContainedInt是一个整型可以被浅度复制,如果增加一个class类型的成员,可以看出区别。
回复

使用道具 举报

千问 | 2008-8-3 23:10:15 | 显示全部楼层
obj1.GetCopy();就是获得一个对象副本;已经不是指向obj1的地址了.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行