Condividi tramite


out (Riferimenti per C#)

È possibile usare la parola chiave contestuale out in due contesti (ciascuno dei quali è un collegamento a informazioni dettagliate), come un modificatore di parametro o in dichiarazioni di parametri di tipo generico in interfacce e delegati. In questo argomento viene descritto il modificatore di parametro, ma è possibile consultare questo altro argomento per informazioni sulle dichiarazioni di parametri di tipo generico.

La parola chiave out fa sì che gli argomenti vengono passati per riferimento. È come per la parola chiave ref, con la differenza che richiede l'inizializzazione della variabile prima di essere passato. Per usare un parametro out, la definizione del metodo e il metodo chiamante devono usare in modo esplicito la parola chiave out. Ad esempio:

class OutExample
{
    static void Method(out int i)
    {
        i = 44;
    }
    static void Main()
    {
        int value;
        Method(out value);
        // value is now 44
    }
}

Nonostante le variabili passate come out non debbano essere inizializzate prima di essere passate, è necessario il metodo chiamato per assegnare un valore prima che il metodo sia restituito.

Nonostante le parole chiave ref e out determinino un comportamento differente in fase di esecuzione, non sono considerate parte della firma del metodo in fase di compilazione. Non è quindi possibile eseguirne l'overload se l'unica differenza è che un metodo accetta un argomento ref e l'altro un argomento out. Il codice seguente, ad esempio, non verrà compilato:

class CS0663_Example
{
    // Compiler error CS0663: "Cannot define overloaded  
    // methods that differ only on ref and out". 
    public void SampleMethod(out int i) { }
    public void SampleMethod(ref int i) { }
}

L'overload può essere eseguito, tuttavia, se un metodo accetta un argomento ref o out e l'altro non ne usa, come segue:

class OutOverloadExample
{
    public void SampleMethod(int i) { }
    public void SampleMethod(out int i) { i = 5; }
}

Le proprietà non sono variabili e quindi non possono essere passate come parametri out.

Per altre informazioni sul passaggio di matrici, vedere Passaggio di matrici mediante ref e out (Guida per programmatori C#).

Non è possibile usare le parole chiave ref e out per i seguenti tipi di metodi:

  • Metodi Async, definiti usando il modificatore async.

  • Metodi Iterator, che comprendono un'istruzione yield return o yield break.

Esempio

La dichiarazione di un metodo out è utile quando si vuole che un metodo restituisca più valori. Nell'esempio seguente viene usato out per restituire tre variabili con una sola chiamata al metodo. Notare che il terzo argomento è assegnato a null. In questo modo i metodi restituiscono i valori facoltativamente.

    class OutReturnExample
    {
        static void Method(out int i, out string s1, out string s2)
        {
            i = 44;
            s1 = "I've been returned";
            s2 = null;
        }
        static void Main()
        {
            int value;
            string str1, str2;
            Method(out value, out str1, out str2);
            // value is now 44 
            // str1 is now "I've been returned" 
            // str2 is (still) null;
        }
    }

Vedere anche

Altre risorse

Riferimenti per C#