Compartilhar via


Passando matrizes com o uso de ref e out (Guia de Programação em C#)

Como todos os parâmetros out, um parâmetro out de um tipo de matriz deve ser atribuído antes que seja usado; ou seja, deve ser atribuído pelo receptor. Por exemplo:

static void TestMethod1(out int[] arr)
{
    arr = new int[10];   // definite assignment of arr
}

Como todos os parâmetros ref, um parâmetro ref de um tipo de matriz deve ser definitivamente atribuído pelo chamador. Portanto, não há necessidade de ser atribuído definitivamente pelo receptor. Um parâmetro ref de um tipo de matriz pode ser alterado como resultado da chamada. Por exemplo, o valor nulo pode ser atribuído à matriz ou pode ser inicializado em uma matriz diferente. Por exemplo:

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

Os dois exemplos a seguir demonstram a diferença entre out e ref quando usados ao passar matrizes para métodos.

Exemplo

Neste exemplo, a matriz theArray é declarada no chamador (o método Main) e inicializada no método FillArray. Em seguida, os elementos da matriz são retornados para o chamador e exibidos.

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        
    */

Neste exemplo, a matriz theArray é inicializada no chamador (o método Main) e passada para o método FillArray ao usar o parâmetro ref. Alguns elementos da matriz são atualizados no método FillArray. Em seguida, os elementos da matriz são retornados para o chamador e exibidos.

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
    */

Consulte também

Referência

ref (Referência de C#)

Modificador de parâmetro out (Referência de C#)

Matrizes (Guia de Programação em C#)

Matrizes unidimensionais (Guia de Programação em C#)

Matrizes multidimensionais (Guia de Programação em C#)

Matrizes denteadas (Guia de Programação em C#)

Conceitos

Guia de Programação em C#