C#里.什么是浅度复制和深度复制?

如题... 如题 展开
 我来答
匿名用户
2013-10-23
展开全部
有的时候,创建一个对象可能会非常耗时,比如对象需要从远程数据库中获取数据来填充,又或者创建对象需要读取硬盘文件。此时,如果已经有了一个对象,再创建新对象时,可能会采用复制现有对象的方法,而不是重新建一个新的对象。
浅度复制 和 深度复制 是以如何复制对象的成员(member)来划分的。一个对象的成员有可能是值类型,有可能是引用类型。当我们对对象进行一个浅度复制的时候,对于值类型成员,会复制其本身(值类型变量本身包含了所有数据,复制时进行按位拷贝);对于引用类型成员(注意它会引用另一个对象),仅仅复制引用,而不创建其引用的对象。结果就是:新对象的引用成员和 复制对象的引用成员 指向了同一个对象。

深度复制就是将引用成员指向的对象也进行复制。实际的过程是创建新的引用成员指向的对象,然后复制对象包含的数据。深度复制可能会变得非常复杂,因为引用成员指向的对象可能包含另一个引用类型成员,最简单的例子就是一个线性链表。如果一个对象的成员包含了对于线性链表结构的一个引用,浅度复制 只复制了对头结点的引用,深度复制 则会复制链表本身,并复制每个结点上的数据。
匿名用户
2013-10-23
展开全部
深度复制就是引用类型的复制

浅度复制是值类型的复制

例如:

using System;
using System.Collections.Generic;
using System.Text;

namespace Test
{
public class Content
{
public int val;

}

//此处若是深度复制才继承ICloneable接口
//public class Cloner : ICloneable

public class Cloner
{
public Content MyContent = new Content();
public Cloner(int newVal)
{
MyContent.val = newVal;
}

//浅度复制

//使用System.Object.MemberwiseClone()进行浅度复制,使用getCopy方法.

public object getCopy()
{
return MemberwiseClone();
}

//深度复制:
public object clone()
{
Cloner clonedCloner = new Cloner(MyContent.val); //此处是实例化一个对象
return clonedCloner;
}

}
}

//主函数

using System;
using System.Collections.Generic;
using System.Text;

namespace Test
{
class Program
{
static void Main(string[] args)
{
Cloner mySource = new Cloner(5);
Cloner myTarget = (Cloner)mySource.getCopy();//深度为cloner
Console.WriteLine("MyTarget.Mycontent.Val={}",myTarget.MyContent.val);
mySource.MyContent.val = 2;
Console.WriteLine("MyTarget.Mycontent.Val={}", myTarget.MyContent.val);
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式