Przekazywanie tablic za pomocą ref i out (Przewodnik programowania w języku C#)
Podobnie jak wszystkie parametry out, parametr out typu tablicowego musi zostać przypisany, aby można go było użyć, a więc musi zostać przypisany przez obiekt wywoływany.Na przykład:
static void TestMethod1(out int[] arr)
{
arr = new int[10]; // definite assignment of arr
}
Podobnie jak wszystkie parametry typu ref, parametr ref typu tablicowego musi zostać zdecydowanie przypisany przez obiekt wywołujący.Dlatego też nie musi być zdecydowanie przypisywany przez obiekt wywoływany.Parametr ref typu tablicowego może zostać zmieniony w wyniku wywołania.Na przykład tablicy może zostać przypisana wartość null albo może zostać zainicjowana do innej tablicy.Na przykład:
static void TestMethod2(ref int[] arr)
{
arr = new int[10]; // arr initialized to a different array
}
W poniższych dwóch przykładach pokazano różnicę między parametrami out i ref, gdy są one używane do przekazywania tablic do metod.
Przykład
W tym przykładzie tablica theArray jest deklarowana w obiekcie wywołującym (metoda Main) i inicjowana w metodzie FillArray.Następnie elementy tablicy są zwracane do obiektu wywołującego i wyświetlane.
class TestOut
{
static void FillArray(out int[] arr)
{
// Initialize the array:
arr = new int[5] { 1, 2, 3, 4, 5 };
}
static void Main()
{
int[] theArray; // Initialization is not required
// Pass the array to the callee using out:
FillArray(out theArray);
// Display the array elements:
System.Console.WriteLine("Array elements are:");
for (int i = 0; i < theArray.Length; i++)
{
System.Console.Write(theArray[i] + " ");
}
// Keep the console window open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}
/* Output:
Array elements are:
1 2 3 4 5
*/
W tym przykładzie tablica theArray jest inicjowana w obiekcie wywołującym (metoda Main) i przekazywana do metody FillArray przy użyciu parametru ref.Niektóre elementy tablicy są aktualizowane w metodzie FillArray.Następnie elementy tablicy są zwracane do obiektu wywołującego i wyświetlane.
class TestRef
{
static void FillArray(ref int[] arr)
{
// Create the array on demand:
if (arr == null)
{
arr = new int[10];
}
// Fill the array:
arr[0] = 1111;
arr[4] = 5555;
}
static void Main()
{
// Initialize the array:
int[] theArray = { 1, 2, 3, 4, 5 };
// Pass the array using ref:
FillArray(ref theArray);
// Display the updated array:
System.Console.WriteLine("Array elements are:");
for (int i = 0; i < theArray.Length; i++)
{
System.Console.Write(theArray[i] + " ");
}
// Keep the console window open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}
/* Output:
Array elements are:
1111 2 3 4 5555
*/
Zobacz też
Informacje
out — Modyfikator parametrów (odwołanie w C#)
Tablice (Przewodnik programowania w języku C#)
Tablice jednowymiarowe (Przewodnik programowania w języku C#)
Tablice wielowymiarowe (Przewodnik programowania w języku C#)
Tablice nieregularne (Przewodnik programowania w języku C#)