直接上代码:这是浅拷贝
class Cloner2
{
public Content MyContent = new Content();
public Cloner2(int newval)
{
MyContent.Val = newval;
}
public object GetCopy()
{
return MemberwiseClone();
}
}
public class Content//用于上面类的引用。
{
public int Val;
}
///浅拷贝
Cloner2 mySource = new Cloner2(55);//对对象应用复制55;
Cloner2 myTarget = (Cloner2)mySource.GetCopy();//调用浅拷贝方法,拷贝给新的对象myTarget(注:浅拷贝是付给了指针,不是新空间
Console.WriteLine("Target.MyContent.Val ={0}", myTarget.MyContent.Val);
mySource.MyContent.Val = 2;//这里给拷贝后的对象复制,用来验证是否是跟前对象是同一个引用。
Console.WriteLine("myTarget.MyContent.Val ={0}", myTarget.MyContent.Val);//结果:MemberwiseClone()浅拷贝是指针,指向同一个对象。
///
Console.ReadKey();
///深拷贝:深拷贝继承接口ICloneable,并且在类里面重写Clone()方法。
class ClonerDip : ICloneable
{
public Content myContent = new Content();
public ClonerDip(int val)
{
this.myContent.Val = val;
}
public object Clone()
{
ClonerDip clonerdip = new ClonerDip(myContent.Val);
return clonerdip;
}
}
///深拷贝
ClonerDip mySource = new ClonerDip(222222);
ClonerDip myTarget = (ClonerDip)mySource.Clone();
Console.WriteLine("mySource.MyContent.Val ={0}", mySource.myContent.Val); //输出结果为:222222
Console.WriteLine("Target.MyContent.Val ={0}", myTarget.myContent.Val); //输出结果为:222222
myTarget.myContent.Val = 5555555;
Console.WriteLine("mySource.MyContent.Val ={0}", mySource.myContent.Val); //输出结果为:222222
Console.WriteLine("myTarget.MyContent.Val ={0}", myTarget.myContent.Val); ///输出结果为:5555555
///
///、、、
Console.ReadKey();