1. 程式人生 > >C# Array類的淺復制Clone()與Copy()的差別

C# Array類的淺復制Clone()與Copy()的差別

類型轉換 靜態方法 eof copy copies 重載 arr object c dex

1 Array.Clone方法

命名空間:System

程序集:mscorlib

語法:

public Object Clone()

Array的淺表副本僅復制Array的元素,不管他們是引用類型還是值類型。可是不負責這些引用所引用的對象。

新Array中的引用與原始Array的引用指向同樣的對象。

例:

int[] intArray1 = {1, 2};

int [] intArray2 = (int [])intArray1.Clone();

這裏須要說明的是。須要使用強制類型轉換,原因在於Clone()返回的類型為Object

2 Array.Copy方法

命名空間:System

程序集:mscorlib

Copy有幾個重載函數:

//從第一個元素開始復制Array中的一系列元素。將它們粘貼到還有一Array中(從第一個元素開始)。長度為32位整數

public static void Copy(Array sourceArray, Array destinationArray, int length)

//從第一個元素開始復制Array中的一系列元素,將它們粘貼到還有一Array中(從第一個元素開始)。長度為64位整數

public static void Copy(Array sourceArray, Array destinationArray, long length)

//從指定的源索引開始,復制Array中的一系列元素。將它們粘貼到還有一Array中(從指定的目標索引開始)。長度和索引指定為32位整數

public static void Copy(Array sourceArray, int sourceIndex,Array destinationArray, int destinationIndex,int length)

//從指定的源索引開始,復制Array中的一系列元素。將它們粘貼到還有一Array中(從指定的目標索引開始)。

長度和索引指定為64位整數

public static void Copy(Array sourceArray, long sourceIndex,Array destinationArray, long destinationIndex,long length)

例: Array myIntArray=Array.CreateInstance( typeof(System.Int32), 5 );

for ( int i = myIntArray.GetLowerBound(0); i <= myIntArray.GetUpperBound(0); i++ )

{myIntArray.SetValue( i+1, i );}

Array myObjArray = Array.CreateInstance( typeof(System.Object), 5 );

for ( int i = myObjArray.GetLowerBound(0); i <= myObjArray.GetUpperBound(0); i++ )

{myObjArray.SetValue( i+26, i );}

// Copies the first element from the Int32 array to the Object array.

Array.Copy( myIntArray, myIntArray.GetLowerBound(0), myObjArray, myObjArray.GetLowerBound(0), 1 );

// Copies the last two elements from the Object array to the Int32 array.

Array.Copy( myObjArray, myObjArray.GetUpperBound(0) - 1, myIntArray, myIntArray.GetUpperBound(0) - 1, 2 );

差別:

Clone()返回值是Object,Copy返回值為void

Clone()是非靜態方法。Copy為靜態方法。

Clone()會創建一個新數組。Copy方法必須傳遞階數同樣且有足夠元素的已有數組。

C# Array類的淺復制Clone()與Copy()的差別