Compartir a través de


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 un tipo de matriz debe asignarse antes de usarse; 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 un tipo de matriz debe asignarlo definitivamente el llamador. Por consiguiente, no es necesario que lo asigne definitivamente 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 en otra matriz. Por ejemplo:

static void TestMethod2(ref int[] arr)
{
    arr = new int[10];   // arr initialized to a different array
}

En los dos ejemplos siguientes se muestra la diferencia entre out y ref cuando se usan 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 llamador 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 llamador 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

ref (Referencia de C#)

Modificador del parámetro out (Referencia de C#)

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#)

Conceptos

Guía de programación de C#