Condividi tramite


out (Riferimenti per C#)

Aggiornamento: novembre 2007

Con la parola chiave out gli argomenti vengono passati per riferimento. È simile alla parola chiave ref, ad eccezione del fatto che con ref è necessario inizializzare la variabile prima che venga passata. Per utilizzare un parametro out, è necessario che la definizione del metodo e il metodo chiamante utilizzino in modo esplicito la parola chiave out. Esempio:

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

Anche se le variabili passate come argomenti out non devono necessariamente essere già state inizializzate, il metodo chiamante deve assegnare un valore prima che venga completato.

Le parole chiave ref e out vengono gestite in modo differente in fase di esecuzione, ma allo stesso modo in fase di compilazione. Pertanto, se un metodo accetta un argomento ref e l'altro un argomento out, non è possibile eseguirne l'overload. Questi due metodi, ad esempio, sono identici in termini di compilazione e pertanto questo codice 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 tuttavia eseguito se un metodo accetta un argomento ref o out e l'altro non ne utilizza, come riportato di seguito:

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

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

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

Esempio

La dichiarazione di un metodo out risulta utile quando si desidera che un metodo restituisca più valori. Un metodo che utilizza un parametro out può comunque accedere alle variabili come tipo restituito (vedere return), ma può anche restituire uno o più oggetti a un metodo chiamante come parametri out. Nell'esempio riportato di seguito viene utilizzato il parametro out per restituire tre variabili con un'unica chiamata al metodo. Si noti che il terzo argomento è assegnato a null. In questo modo i metodi possono restituire valori in modo facoltativo.

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;
    }
}

Specifiche del linguaggio C#

Per ulteriori informazioni, vedere le sezioni riportate di seguito in Specifiche del linguaggio C#:

  • 5.1.6 Parametri di output

  • 10.6.1.3 Parametri di output

Vedere anche

Concetti

Guida per programmatori C#

Riferimenti

Parole chiave di C#

Parametri di metodo (Riferimenti per C#)

Altre risorse

Riferimenti per C#