Passage de tableaux à l'aide de paramètres ref et out (guide de programmation C#)
Comme tous les paramètres out, le paramètre out d'un type de tableau doit être assigné avant d'être utilisé ; c'est-à-dire qu'il doit être assigné par l'appelé. Par exemple :
static void TestMethod1(out int[] arr)
{
arr = new int[10]; // definite assignment of arr
}
Comme tous les paramètres ref, un paramètre ref de type tableau doit absolument être assigné par l'appelant. Par conséquent, il n'a pas besoin d'être assigné par l'appelé. Un paramètre ref d'un type tableau peut être modifié à la suite de l'appel. Par exemple, la valeur null peut être assignée au tableau ou ce dernier peut être initialisé à un tableau différent. Par exemple :
static void TestMethod2(ref int[] arr)
{
arr = new int[10]; // arr initialized to a different array
}
Les deux exemples suivants illustrent la différence entre les paramètres out et ref lorsqu'ils sont utilisés pour le passage de tableaux à des méthodes.
Exemple
Dans cet exemple, le tableau theArray est déclaré dans l'appelant (la méthode Main) et initialisé dans la méthode FillArray. Ensuite, les éléments du tableau sont retournés à l'appelant puis affichés.
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
*/
Dans cet exemple, le tableau theArray est initialisé dans l'appelant (la méthode Main) et passé à la méthode FillArray à l'aide du paramètre ref. Certains des éléments du tableau sont mis à jour dans la méthode FillArray. Ensuite, les éléments du tableau sont retournés à l'appelant puis affichés.
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
*/
Voir aussi
Référence
out, modificateur de paramètre (Référence C#)
Tableaux (guide de programmation C#)
Tableaux unidimensionnels (Guide de programmation C#)
Tableaux multidimensionnels (Guide de programmation C#)
Tableaux en escalier (Guide de programmation C#)