Pasar matrices mediante Ref y Out (Guía de programación de C#)
Al igual que todos los parámetros out, un parámetro out de tipo de matriz debe asignarse antes de utilizarlo; es decir, debe asignarlo el destinatario. Por ejemplo:
static void TestMethod1(out int[] arr)
{
arr = new int[10]; // definite assignment of arr
}
Al igual que todos los parámetros ref, un parámetro ref de tipo de matriz debe asignarlo el llamador. Por consiguiente, no es necesario que lo asigne el destinatario. Un parámetro ref de un tipo de matriz puede cambiar como resultado de la llamada. Por ejemplo, a la matriz se le puede asignar el valor null o se puede inicializar con otra matriz. Por ejemplo:
static void TestMethod2(ref int[] arr)
{
arr = new int[10]; // arr initialized to a different array
}
Los dos ejemplos siguientes muestran la diferencia entre out y ref cuando se utilizan para pasar matrices a métodos.
Ejemplo
En este ejemplo, la matriz theArray se declara en el llamador (el método Main) y se inicializa en el método FillArray. A continuación, los elementos de la matriz se devuelven al método que realizó la llamada y se muestran.
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
*/
En este ejemplo, la matriz theArray se inicializa en el llamador (el método Main) y se pasa al método FillArray mediante el parámetro ref. Algunos de los elementos de la matriz se actualizan en el método FillArray. A continuación, los elementos de la matriz se devuelven al método que realizó la llamada y se muestran.
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
*/
Vea también
Referencia
Matrices (Guía de programación de C#)
Matrices unidimensionales (Guía de programación de C#)
Matrices multidimensionales (Guía de programación de C#)
Matrices escalonadas (Guía de programación de C#)