Array.Clone 方法
定義
public:
virtual System::Object ^ Clone();
public virtual object Clone ();
abstract member Clone : unit -> obj
override this.Clone : unit -> obj
Public Overridable Function Clone () As Object
傳回
實作
範例
下列程式碼範例會複製 System.Globalization.CultureInfo 陣列,並示範淺層複製的行為。The following code example clones a System.Globalization.CultureInfo array and demonstrates the behavior of a shallow copy.
using namespace System;
using namespace System::Globalization;
void PrintIndexAndValues( Array^ myArray );
int main()
{
// Create and initialize a new CultureInfo array.
CultureInfo^ ci0 = gcnew CultureInfo( "ar-SA",false );
CultureInfo^ ci1 = gcnew CultureInfo( "en-US",false );
CultureInfo^ ci2 = gcnew CultureInfo( "fr-FR",false );
CultureInfo^ ci3 = gcnew CultureInfo( "ja-JP",false );
array<CultureInfo^>^arrCI = {ci0,ci1,ci2,ci3};
// Create a clone of the CultureInfo array.
array<CultureInfo^>^arrCIClone = (array<CultureInfo^>^)arrCI->Clone();
// Replace an element in the clone array.
CultureInfo^ ci4 = gcnew CultureInfo( "th-TH",false );
arrCIClone[ 0 ] = ci4;
// Display the contents of the original array.
Console::WriteLine( "The original array contains the following values:" );
PrintIndexAndValues( arrCI );
// Display the contents of the clone array.
Console::WriteLine( "The clone array contains the following values:" );
PrintIndexAndValues( arrCIClone );
// Display the DateTimeFormatInfo.DateSeparator for the fourth element in both arrays.
Console::WriteLine( "Before changes to the clone:" );
Console::WriteLine( " Original: The DateTimeFormatInfo->DateSeparator for {0} is {1}.", arrCI[ 3 ]->Name, arrCI[ 3 ]->DateTimeFormat->DateSeparator );
Console::WriteLine( " Clone: The DateTimeFormatInfo->DateSeparator for {0} is {1}.", arrCIClone[ 3 ]->Name, arrCIClone[ 3 ]->DateTimeFormat->DateSeparator );
// Replace the DateTimeFormatInfo.DateSeparator for the fourth element in the clone array.
arrCIClone[ 3 ]->DateTimeFormat->DateSeparator = "-";
// Display the DateTimeFormatInfo.DateSeparator for the fourth element in both arrays.
Console::WriteLine( "After changes to the clone:" );
Console::WriteLine( " Original: The DateTimeFormatInfo->DateSeparator for {0} is {1}.", arrCI[ 3 ]->Name, arrCI[ 3 ]->DateTimeFormat->DateSeparator );
Console::WriteLine( " Clone: The DateTimeFormatInfo->DateSeparator for {0} is {1}.", arrCIClone[ 3 ]->Name, arrCIClone[ 3 ]->DateTimeFormat->DateSeparator );
}
void PrintIndexAndValues( Array^ myArray )
{
for ( int i = myArray->GetLowerBound( 0 ); i <= myArray->GetUpperBound( 0 ); i++ )
Console::WriteLine( "\t[{0}]:\t{1}", i, myArray->GetValue( i ) );
}
/*
This code produces the following output.
The original array contains the following values:
[0]: ar-SA
[1]: en-US
[2]: fr-FR
[3]: ja-JP
The clone array contains the following values:
[0]: th-TH
[1]: en-US
[2]: fr-FR
[3]: ja-JP
Before changes to the clone:
Original: The DateTimeFormatInfo.DateSeparator for ja-JP is /.
Clone: The DateTimeFormatInfo.DateSeparator for ja-JP is /.
After changes to the clone:
Original: The DateTimeFormatInfo.DateSeparator for ja-JP is -.
Clone: The DateTimeFormatInfo.DateSeparator for ja-JP is -.
*/
using System;
using System.Globalization;
public class SamplesArray {
public static void Main() {
// Create and initialize a new CultureInfo array.
CultureInfo ci0 = new CultureInfo( "ar-SA", false );
CultureInfo ci1 = new CultureInfo( "en-US", false );
CultureInfo ci2 = new CultureInfo( "fr-FR", false );
CultureInfo ci3 = new CultureInfo( "ja-JP", false );
CultureInfo[] arrCI = new CultureInfo[] { ci0, ci1, ci2, ci3 };
// Create a clone of the CultureInfo array.
CultureInfo[] arrCIClone = (CultureInfo[]) arrCI.Clone();
// Replace an element in the clone array.
CultureInfo ci4 = new CultureInfo( "th-TH", false );
arrCIClone[0] = ci4;
// Display the contents of the original array.
Console.WriteLine( "The original array contains the following values:" );
PrintIndexAndValues( arrCI );
// Display the contents of the clone array.
Console.WriteLine( "The clone array contains the following values:" );
PrintIndexAndValues( arrCIClone );
// Display the DateTimeFormatInfo.DateSeparator for the fourth element in both arrays.
Console.WriteLine( "Before changes to the clone:" );
Console.WriteLine( " Original: The DateTimeFormatInfo.DateSeparator for {0} is {1}.", arrCI[3].Name, arrCI[3].DateTimeFormat.DateSeparator );
Console.WriteLine( " Clone: The DateTimeFormatInfo.DateSeparator for {0} is {1}.", arrCIClone[3].Name, arrCIClone[3].DateTimeFormat.DateSeparator );
// Replace the DateTimeFormatInfo.DateSeparator for the fourth element in the clone array.
arrCIClone[3].DateTimeFormat.DateSeparator = "-";
// Display the DateTimeFormatInfo.DateSeparator for the fourth element in both arrays.
Console.WriteLine( "After changes to the clone:" );
Console.WriteLine( " Original: The DateTimeFormatInfo.DateSeparator for {0} is {1}.", arrCI[3].Name, arrCI[3].DateTimeFormat.DateSeparator );
Console.WriteLine( " Clone: The DateTimeFormatInfo.DateSeparator for {0} is {1}.", arrCIClone[3].Name, arrCIClone[3].DateTimeFormat.DateSeparator );
}
public static void PrintIndexAndValues( Array myArray ) {
for ( int i = myArray.GetLowerBound(0); i <= myArray.GetUpperBound(0); i++ )
Console.WriteLine( "\t[{0}]:\t{1}", i, myArray.GetValue( i ) );
}
}
/*
This code produces the following output.
The original array contains the following values:
[0]: ar-SA
[1]: en-US
[2]: fr-FR
[3]: ja-JP
The clone array contains the following values:
[0]: th-TH
[1]: en-US
[2]: fr-FR
[3]: ja-JP
Before changes to the clone:
Original: The DateTimeFormatInfo.DateSeparator for ja-JP is /.
Clone: The DateTimeFormatInfo.DateSeparator for ja-JP is /.
After changes to the clone:
Original: The DateTimeFormatInfo.DateSeparator for ja-JP is -.
Clone: The DateTimeFormatInfo.DateSeparator for ja-JP is -.
*/
Imports System.Globalization
Public Class SamplesArray
Public Shared Sub Main()
' Create and initialize a new CultureInfo array.
Dim ci0 As New CultureInfo("ar-SA", False)
Dim ci1 As New CultureInfo("en-US", False)
Dim ci2 As New CultureInfo("fr-FR", False)
Dim ci3 As New CultureInfo("ja-JP", False)
Dim arrCI() As CultureInfo = {ci0, ci1, ci2, ci3}
' Create a clone of the CultureInfo array.
Dim arrCIClone As CultureInfo() = CType(arrCI.Clone(), CultureInfo())
' Replace an element in the clone array.
Dim ci4 As New CultureInfo("th-TH", False)
arrCIClone(0) = ci4
' Display the contents of the original array.
Console.WriteLine("The original array contains the following values:")
PrintIndexAndValues(arrCI)
' Display the contents of the clone array.
Console.WriteLine("The clone array contains the following values:")
PrintIndexAndValues(arrCIClone)
' Display the DateTimeFormatInfo.DateSeparator for the fourth element in both arrays.
Console.WriteLine("Before changes to the clone:")
Console.WriteLine(" Original: The DateTimeFormatInfo.DateSeparator for {0} is {1}.", arrCI(3).Name, arrCI(3).DateTimeFormat.DateSeparator)
Console.WriteLine(" Clone: The DateTimeFormatInfo.DateSeparator for {0} is {1}.", arrCIClone(3).Name, arrCIClone(3).DateTimeFormat.DateSeparator)
' Replace the DateTimeFormatInfo.DateSeparator for the fourth element in the clone array.
arrCIClone(3).DateTimeFormat.DateSeparator = "-"
' Display the DateTimeFormatInfo.DateSeparator for the fourth element in both arrays.
Console.WriteLine("After changes to the clone:")
Console.WriteLine(" Original: The DateTimeFormatInfo.DateSeparator for {0} is {1}.", arrCI(3).Name, arrCI(3).DateTimeFormat.DateSeparator)
Console.WriteLine(" Clone: The DateTimeFormatInfo.DateSeparator for {0} is {1}.", arrCIClone(3).Name, arrCIClone(3).DateTimeFormat.DateSeparator)
End Sub
Public Shared Sub PrintIndexAndValues(myArray As Array)
Dim i As Integer
For i = myArray.GetLowerBound(0) To myArray.GetUpperBound(0)
Console.WriteLine(vbTab + "[{0}]:" + vbTab + "{1}", i, myArray.GetValue(i))
Next i
End Sub
End Class
'This code produces the following output.
'
'The original array contains the following values:
' [0]: ar-SA
' [1]: en-US
' [2]: fr-FR
' [3]: ja-JP
'The clone array contains the following values:
' [0]: th-TH
' [1]: en-US
' [2]: fr-FR
' [3]: ja-JP
'Before changes to the clone:
' Original: The DateTimeFormatInfo.DateSeparator for ja-JP is /.
' Clone: The DateTimeFormatInfo.DateSeparator for ja-JP is /.
'After changes to the clone:
' Original: The DateTimeFormatInfo.DateSeparator for ja-JP is -.
' Clone: The DateTimeFormatInfo.DateSeparator for ja-JP is -.
備註
Array 的淺層複本只會複製 Array的元素,不論它們是參考型別或實數值型別,但不會複製參考所參考的物件。A shallow copy of an Array copies only the elements of the Array, whether they are reference types or value types, but it does not copy the objects that the references refer to. 新 Array 中的參考會指向原始 Array 中的參考所指向的相同物件。The references in the new Array point to the same objects that the references in the original Array point to.
相反地,Array 的深層複本會複製元素,以及元素直接或間接參考的所有專案。In contrast, a deep copy of an Array copies the elements and everything directly or indirectly referenced by the elements.
複製的 Type 與原始 Array相同。The clone is of the same Type as the original Array.
這個方法是 O (n
)運算,其中 n
是 Length。This method is an O(n
) operation, where n
is Length.