写个代码来测试一下:
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;
}