Modifizierer für out-Parameter (C#-Verweis)

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

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

Als out-Argument übergebene Variablen müssen zwar nicht initialisiert werden, bevor sie übergeben werden, aber die aufrufende Methode muss einen Wert zuweisen, bevor die Methode einen Wert zurückgibt.

Obwohl das ref-Schlüsselwort und out-Schlüsselwort das Verhalten der Laufzeit verändern, werden sie zur Kompilierzeit nicht als Teil der Methodensignatur betrachtet. Daher können Methoden nicht überladen werden, wenn der Unterschied nur darin besteht, dass eine Methode ein ref-Argument annimmt und die andere Methode ein out-Argument. Daher kann das folgende Codebeispiel nicht kompiliert werden:

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

Die Überladung ist jedoch möglich, wenn eine Methode ein ref-Argument oder ein out-Argument annimmt und die andere Methode keines der beiden Argumente verwendet. Beispiel:

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 die ref und out Schlüsselwörter für die folgenden Arten von Methoden nicht verwenden:

  • Async-Methoden, die Sie definieren, indem Sie den async-Modifizierer verwenden.

  • Iteratormethoden, die eine Rendite 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 wird. Auf diese Weise 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;
        }
    }

C#-Programmiersprachenspezifikation

Weitere Informationen erhalten Sie unter C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.

Siehe auch

Referenz

C#-Schlüsselwörter

Methodenparameter (C#-Referenz)

Konzepte

C#-Programmierhandbuch

Weitere Ressourcen

C#-Referenz