C#浅拷贝的问题,求高手赐教。

小生是在北大青鸟第二学期的学生,刚好学到深入C#和.net平台这本书。我想问一个问题,希望高手能给出正确答案。1.什么是浅拷贝2.为什么要用浅拷贝3.什么用浅拷贝4.怎么... 小生是在北大青鸟第二学期的学生,刚好学到深入C#和.net平台这本书。
我想问一个问题,希望高手能给出正确答案。

1.什么是浅拷贝
2.为什么要用浅拷贝
3.什么用浅拷贝
4.怎么用浅拷贝。

求各位IT大侠们帮小弟解决疑惑,小弟感激不禁。。。
展开
 我来答
loeveol
2010-11-02 · TA获得超过541个赞
知道小有建树答主
回答量:120
采纳率:0%
帮助的人:137万
展开全部
1.拷贝即是通常所说的复制(Copy)或克隆(Clone),对象的拷贝也就是从现有对象复制一个“一模一样”的新对象出来。虽然都是复制对象,但是不同的复制方法,复制出来的新对象却并非完全一模一样,对象内部存在着一些差异。通常的拷贝方法有两种,即深拷贝和浅拷贝,那二者之间有何区别呢?MSDN里对IClone接口的Clone方法有这样的说明:在深层副本中,所有的对象都是重复的;而在浅表副本中,只有顶级对象是重复的,并且顶级以下的对象包含引用。可以看出,深拷贝和浅拷贝之间的区别在于是否复制了子对象。

2.浅拷贝主要适用于不对拷贝过的对象的属性对象修改或者修改后也不会对其它引用源对象的对象不产生影响的情况下(这就得根据需要进行选择使用深的还是浅的)

3.大多数实现了IClone接口类就是使用浅拷贝。

4.比如有个类,ClassA,有属性string a1="a1";string a2="a2";object a3=new object();
ClassA cla1 = new ClaasA();
ClassA cla2 = new ClassA();
cla2.a1 = cla1.a1;
cla2.a2 = cla1.a2;
cla2.a3 = cla1.a3;

这就算是浅拷贝;
主要区别在于a3这个属性上,其实cla1与cla2是分别有内存空间的,但是对于cla1和cla2的a3属性来说,a3只有一个内存地址,如果修改了a3的某一个属性,cla1和cla2的a3属性将同时发生变化,而a1和a2是值类型的,他属于各自拥有它的对象,所以修改cla1的a1和a2属性后,cla2的a1和a2是不会发生改变的。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式