技术开发 频道

对象的深层拷贝

  写个代码来测试一下:

 class Program

 {

 static void Main()

 {

 Data3 data3 = new Data3();

 Data data = new Data(data3);

 data.PriValue = "Pri";

 data.Integer = 3;

 //修改cloneData对象,并未影响到data对象,说明克隆成功

 CsToD ctd = new CsToD();

 Data cloneData = ctd.DeepCloneObject(data);

 cloneData.Integer = 1000;

 cloneData.PriValue = "clone";

 cloneData.Value.D3String = "clonestr";

 Console.WriteLine(data.Integer + "<->" + cloneData.Integer);

 Console.WriteLine(data.PriValue + "<->" + cloneData.PriValue);

 Console.WriteLine(data.Value.D3String + "<->" + cloneData.Value.D3String);

 //而如果修改refData对象,data对象也被改变,说明是同一对象

 Data refData = data;

 refData.Integer = 555;

 refData.PriValue = "ref";

 refData.Value.D3String = "refstr";

 Console.WriteLine(data.Integer + "<->" + refData.Integer);

 Console.WriteLine(data.PriValue + "<->" + refData.PriValue);

 Console.WriteLine(data.Value.D3String + "<->" + refData.Value.D3String);

 }

 }

 class Data:Data2

 {

 public Data(Data3 value)

 {

 this.Value = value;

 }

 public Data() { }

 public Data3 Value;

 }

 class Data2

 {

 public Data2(int value)

 {

 this.Integer = value;

 }

 public string PriValue

 {

 get

 {

 return priValue;

 }

 set

 {

 priValue = value;

 }

 }

 public Data2() { }

 public int Integer;

 private string priValue;

 }

 class Data3

 {

 public Data3()

 {

 D3String = "D3";

 d3Integer = 3;

 }

 public string D3String;

 private int d3Integer;

 }
 

0
相关文章