让我们有这个代码:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
在主要方法中:
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(Array1[i].x);
Run Code Online (Sandbox Code Playgroud)
输出 :
0
1
11
3
虽然A级实现了IClonable ...... !! 那么..实现IClonable In Array有什么好处?
来自http://msdn.microsoft.com/en-us/library/k4yx47a1.aspx:
"如果sourceArray和destinationArray都是引用类型数组或者都是Object类型的数组,则执行浅表副本.Array的浅表副本是一个新的Array,包含与原始Array相同元素的引用.元素本身或元素引用的任何内容都不会被复制"
可能有比这更好的方法,但您可以使用的一种技术是:
A[] array2 = array1.Select (a =>(A)a.Clone()).ToArray();
Run Code Online (Sandbox Code Playgroud)