深度复制就是引用类型的复制,浅度复制是值类型的复制,可以参考一下代码例子说明:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Tests
{
class Program
{
static void Main(string[] args)
{
Cloner mySource = new Cloner(10);
Cloner myTarget = (Cloner)mySource.getCopy();//深度为cloner/相当于装箱(值类型转换为引用类型)
Console.WriteLine("mySource赋值之前MyTarget.Text.Val={0}", myTarget.text.val);
mySource.text.val = 7;//相当于引用类型中A的值改变,B的值也随之改变,因为是引用的地址。
Console.WriteLine("mySource赋值之后MyTarget.Text.Val={0}", myTarget.text.val);
Console.Read();
}
public class Text
{
public int val;
}
//此处若是深度复制才继承ICloneable接口
//public class Cloner : ICloneable
public class Cloner
{
public Text text = new Text();
public Cloner(int newVal)
{
text.val = newVal;
}
//浅度复制
//使用System.Object.MemberwiseClone()进行浅度复制,使用getCopy方法.
public object getCopy()
{
return MemberwiseClone();
}
//深度复制:
public object clone()
{
Cloner clonedCloner = new Cloner(text.val); //此处是实例化一个对象
return clonedCloner;
}
}
}
}
|