out (C#-Referenz)

Sie können das kontextbezogene Schlüsselwort out in zwei Kontexten (jeder ist ein Link zu detaillierten Informationen) als einen Parametermodifizierer oder in Parameterdeklarationen vom Typ "generisch" in Schnittstellen und Delegaten verwenden. Dieses Thema behandelt die Parametermodifizierer; in diesem anderen Thema finden Sie Informationen über die Parameterdeklarationen vom Typ "generisch".

Das Schlüsselwort out bewirkt, dass Argumente per Verweis übergeben werden. Dies entspricht dem Schlüsselwort ref, mit Ausnahme davon, dass beiref die Variable initialisiert sein muss, bevor sie übergeben wird. Um einen Parameter out zu verwenden, müssen sowohl die Methodendefinition als auch die aufrufende Methode das Schlüsselwort out explizit verwenden. Beispiel:

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

Auch wenn Variablen, die als out-Argumente übergeben werden, nicht initialisiert sein müssen, bevor Sie übergeben werden, muss die aufgerufene Methode einen Wert zuweisen, bevor die Methode zurückgegeben wird.

Obwohl die Schlüsselwörter ref und out unterschiedliche Laufzeitverhalten hervorrufen, gelten sie zum Zeitpunkt der Kompilierung nicht als Teil der Methodensignatur. Aus diesem Grund können die Methoden nicht überladen werden, wenn der einzige Unterschied darin besteht, dass eine Methode ein ref-Argument übernimmt und die andere ein out-Argument. Der folgende Code wird z. B. nicht kompiliert:

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) { }
}

Überladen ist möglich; wenn jedoch eine Methode ein ref- oder out-Argument übernimmt und die andere keines der beiden, gilt Folgendes:

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

Eigenschaften sind keine Variablen und können daher nicht als out-Parameter übergeben werden.

Weitere Informationen zum Übergeben von Arrays finden Sie unter Übergeben von Arrays mithilfe von "ref" und "out" (C#-Programmierhandbuch).

Sie können keines der beiden Schlüsselwörter ref und out für die folgenden Methodentypen verwenden:

  • Async-Methoden, die Sie mit dem async-Modifizierer definieren.

  • Iterator-Methoden, die eine yield return- oder yield break-Anweisung enthalten.

Beispiel

Das Deklarieren einer out-Methode ist nützlich, wenn eine Methode mehrere Werte zurückgeben soll. Im folgenden Beispiel wird out verwendet, um mit einem Methodenaufruf drei Variablen zurückzugeben. Beachten Sie, dass das dritte Argument Null zugewiesen ist. Dadurch können Methoden Werte optional zurückgeben.

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

Siehe auch

Weitere Ressourcen

C#-Referenz