Condividi tramite


Passaggio di matrici mediante ref e out (Guida per programmatori C#)

Analogamente a tutti i parametri out, anche il parametro out di un tipo matrice deve essere assegnato prima dell'uso, ovvero assegnato dal chiamato.Di seguito è riportato un esempio:

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

Come tutti i parametri ref, anche il parametro ref di un tipo matrice deve essere assolutamente assegnato dal chiamante.Non è pertanto necessario che venga assegnato dalla procedura che viene chiamata.Il parametro ref di un tipo matrice può risultare modificato in conseguenza della chiamata.È ad esempio possibile che alla matrice venga assegnato il valore null o che essa venga inizializzata con una matrice diversa.Di seguito è riportato un esempio:

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

Nei due esempi che seguono viene illustrata la differenza tra out e ref quando vengono utilizzati per passare matrici a metodi.

Esempio

In questo esempio la matrice theArray viene dichiarata nel chiamante (il metodo Main) e inizializzata nel metodo FillArray.Gli elementi vengono quindi restituiti al chiamante e visualizzati.

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

In questo esempio la matrice theArray viene inizializzata nel chiamante (il metodo Main) e passata al metodo FillArray utilizzando il parametro ref.Alcuni degli elementi della matrice vengono aggiornati nel metodo FillArray.Gli elementi vengono quindi restituiti al chiamante e visualizzati.

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

Vedere anche

Riferimenti

Matrici (Guida per programmatori C#)

Matrici unidimensionali (Guida per programmatori C#)

Matrici multidimensionali (Guida per programmatori C#)

Matrici irregolari (Guida per programmatori C#)

Concetti

Guida per programmatori C#