最近比较闲,我又深入研究了一下c#入门经典这本书,发现好多以前不懂的东西现在有点了解了,关于深度副制和浅度复制的问题,其实说白了就是一个引用类型和值类型的问题,浅度复制就是引用类型的副制,副制和被副制的两个对象他们引用的实例其实是同一个,而深度副制和结构很像,是一种值的副制,两个对象所引用的实例是完全不同的,下面我举个例子:
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);
}
}
}