为什么ICloneable接口的Clone方法不返回深度复制?以下是示例代码:
在
class A : ICloneable
{
public int x = 2;
public A(int x)
{
this.x = x;
}
public A copy()
{
A a = new A(this.x);
return a;
}
public object Clone()
{
A a = new A(this.x);
return a;
}
}
在
Main
方法中:A[] Array1 = new A[4] ;
Array1[0] = new A(0);
Array1[1] = new A(1);
Array1[2] = new A(2);
Array1[3] = new A(3);
A[] Array2 = new A[10];
Array. Copy(Array1, Array2, 4);
Array2[2].x = 11;
for (int i = 0; i < 4; i++)
Console.WriteLine($"Index {i} value: {Array1[i].x}");
请记住,我只改变了Array2
中的第二个元素索引,这里是上述代码的输出,列出了Array1
中的值:
Index 0 value: 0
Index 1 value: 1
Index 2 value: 11
Index 3 value: 3
< p > 在 Array1
中,索引2的值为11
,尽管我已经在Array2
中更改了它,并且类A
实现了ICloneable
!< /p >
< p >那么,Array
实现ICloneable
有什么好处呢?< /p >
ICloneable
接口并不能保证克隆出来的对象是深拷贝。根据官方文档所述:“ICloneable 接口只要求您实现 Clone() 方法返回当前对象实例的副本。它不指定克隆操作是否执行深度复制、浅表复制或介于两者之间的某种操作。” - ruffin