|
接下来介绍一下数组的拷贝: 首先数组的直接拷贝也就是复制,不用多说看例子:
 int [] numbers = ...{ 2, 3, 4, 5};

int [] numbersCopy = numbers;

numbersCopy[2] = 0;

Console.Write(numbers[2]);

Console.Write(numbersCopy[2]);

结果就是
0
0
道理很简单,数组的复制也就是引用传递,指向的是同一个地址,这不是我们介绍的重点
接下来
看一下概念
数组是引用类型,所以将一个数组变量赋予另一个数组变量,就会得到两个指向同一数组的变量。而复制数组,会使数组实现ICloneable接口。这个接口定义的Clone()方法会创建数组的浅副本。
如果数组的元素是值类型,就会复制所有的值,如果数组包含引用类型,则不复制元素,而只复制引用,
除了使用Clone()方法之外,还可以使用Array.Copy()方法创建浅副本。但Clone()方法和Copy()方法有一个重要区别:Clone()方法会创建一个新数组,而Copy()方法只是传送了阶数相同、有足够元素空间的已有数组。
提示:
如果需要包含引用类型的数组的深副本,就必须迭代数组,创建新对象。
看一下例子:
using System;
using System.Collections.Generic;
using System.Text;

namespace WindowsApplication1
 ...{
class Class2
 ...{
public static void Main()
 ...{
 int[] numbers = ...{ 2, 3, 4, 5 };

int[] numbersCopy = new int[5];

numbers.CopyTo(numbersCopy,0);

numbersCopy[2] = 0;

 int[] numbers1 = ...{ 2, 3, 4, 5 };

int[] numbersClone1 = (int[])numbers1.Clone();

numbersClone1[2] = 0;

Console.Write(numbers[2] + "---" + numbersCopy[2]);

Console.Read();


}
}
}

我这里介绍的主要是数组的clone和copyto的用法,两者都不会改变其中的值,与上面我们的复制有很大的区别
因为数组里面是值类型,所以他们不存在引用,而
class class1
 ...{
public string aa = "aa";
}
 class class4
 ...{
public static void Main()
 ...{
class1 aaa = new class1();
class1[] array3 = new class1[1];
class1[] array4 = new class1[1];
array3[0] = aaa;
//Array.Copy(array3, 0, array4, 0,1);
array3.CopyTo(array4, 0);
//array4=(class1[])array3.Clone();
array3[0].aa = "bb";

Console.Write(array4[0].aa);
Console.Read();
}
}
结果是两者都改变了值,最后输出都是bb,那时因为两者都是浅拷贝,区别上面已经介绍了,所以
都没有实现深拷贝,以上如果分析有错误请大家指出,这只是我这么认为!
共2页: 上一页 [1] 2 下一页
|