ASP中深度复制和浅层复制的分析 网
本文简单分析了ASP.NET的深层复制和浅层复制。分享给大家参考。具体分析如下:
之前还没有搞清楚深度复制和浅层复制的区别。今天,我彻底了解了这件事,并把它写出来与家人分享。
如果不明白值类型和引用类型的区别,请先阅读//www . JB 51 . net/article/57471 . htm。本来想自己写的,只是看到很全面,所以没有自己写。
大家都知道Object是所有类的公共基类,它的方法是MemberwiseClone(),目的是
我们可以通过这种方法达到浅层复制的效果。
我们通过一个例子来解释一下浅复制和深复制的区别:复制代码如下:公共类内容{ public int val}公共类Cloner { public Content MyContent=new Content();
public Cloner(int NewVal){ my content。Val=newVal} public object GetCopy(){ return MemberWiseClone();}}
这里我们有两个类,一个是Content类,只有一个是值类型为int的Val,另一个是Cloner类,它有一个Content类型的成员,然后有一个构造函数可以初始化这个成员,最后还有一个GetCopy方法通过MemberwiseClone方法来复制自己。
接下来,我们通过一段代码调用Cloner类:复制代码如下: static void main(string[]args){ Cloner source=new Cloner(10);克隆人目标=(克隆人)来源。GetCopy();//返回的对象类型需要转换为。console . write line(' target . my content . val={ 0 } ',target . my content . val);来源。我的内容值=15;控制台。WriteLine('target。我的内容。值={0},目标。我的内容。控制台。ReadKey();}结果是:
我们可以看到,我们通过GetCopy()函数将类源复制到目标,但是当我们更改源时,源的输出值也会发生变化。因此,我们可以得出这样的结论:我们通过MemberwiseClone()复制的只是一个引用,即源和目标的MyContent是同一个对象实例。这是浅层复制,那么如何实现深层复制呢?在。NET框架,我们提供了一个独立的接口。
首先我们来看看ICloneable接口:复制代码如下://抽象://支持克隆,即创建一个与现有实例值相同的类的新实例。[comvisible (true)]公共接口icloneable {//abstract : //创建一个新对象作为当前实例的副本。////返回结果: //一个新对象,它是此实例的副本。对象克隆();}
在上面的例子中,我们只需要修改一些代码:复制代码如下:公共类cloner : I可克隆{ public content my content=new content();
public Cloner(int NewVal){ my content。Val=newVal}//public object GetCopy()//{//return MemberwiseClone();//}公共对象Clone(){ Cloner cloned=new Cloner(my content)。val);返回克隆的;}}
为了有所作为,我在上面放了之前的代码。注释代码是浅拷贝,而后者是深拷贝。我们可以看到区别在于实例是由MyContent重新生成的。此实例的Val并返回到目标。测试结果为:
在这里,如果MyContent的成员不是值类型,那么我们需要深入一下,像下面这样:复制代码如下: public object clone(){ clonercloned=new cloner();克隆的。我的内容=我的内容。clone();返回克隆的;}深度复制和浅层复制是这样的。关键是创建一个新的对象实例并返回它,而不是返回原始的对象实例。
希望这篇文章对大家的学习有所帮助。NET编程。
版权声明:ASP中深度复制和浅层复制的分析 网是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。

















