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


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方法必須傳遞階數相同且有足夠元素的已有數組。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM