Diese Dokumentation wurde archiviert und wird nicht länger gepflegt.

ref (C#-Referenz)

Das ref-Schlüsselwort bewirkt, dass Argumente als Verweis übergeben werden. Dies hat zur Folge, dass alle Änderungen am Methodenparameter in diese Variable übernommen werden, sobald die Steuerung wieder an die aufrufende Methode übergeben wird. Um einen ref-Parameter zu verwenden, müssen sowohl die Methodendefinition als auch die aufrufende Methode explizit das ref-Schlüsselwort verwenden. Beispiel:

class RefExample
{
    static void Method(ref int i)
    {
        i = 44;
    }
    static void Main()
    {
        int val = 0;
        Method(ref val);
        // val is now 44
    }
}

Ein Argument, das an einen ref-Parameter übergeben wird, muss zunächst initialisiert werden. Dies stellt einen Unterschied zu out dar, denn das Argument dieses Parameters muss nicht explizit initialisiert werden, bevor es übergeben wird. (Informationen finden Sie unter out.)

ref und out werden zur Laufzeit zwar unterschiedlich, zur Kompilierzeit aber gleich behandelt. Daher können Methoden nicht überladen werden, wenn eine Methode ein ref-Argument annimmt und die andere Methode ein out-Argument annimmt. Diese beiden Methoden sind beispielsweise hinsichtlich der Kompilierung identisch, weswegen dieser Code nicht kompiliert wird:

class CS0663_Example 
{
    // compiler error CS0663: "cannot define overloaded 
    // methods that differ only on ref and out"
    public void SampleMethod(ref int i) {  }
    public void SampleMethod(out 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 RefOutOverloadExample
{
    public void SampleMethod(int i) {  }
    public void SampleMethod(ref int i) {  }
}

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

Informationen zum Übergeben von Arrays finden Sie unter Übergeben von Arrays mithilfe von "ref" und "out".

Das oben veranschaulichte Übergeben von Werttypen als Verweis ist nützlich, aber ref kann auch zum Übergeben von Verweistypen verwendet werden. Auf diese Weise können die aufgerufenen Methoden das Objekt ändern, auf das der Verweis verweist, da der Verweis selbst als Verweis übergeben wird. Im folgenden Beispiel wird dargestellt, dass das Objekt selbst geändert werden kann, wenn ein Verweistyp als ref-Parameter übergeben wird.

class RefRefExample
{
    static void Method(ref string s)
    {
        s = "changed";
    }
    static void Main()
    {
        string str = "original";
        Method(ref str);
        // str is now "changed"
    }
}

Weitere Informationen finden Sie in den folgenden Abschnitten von C#-Programmiersprachenspezifikation:

  • 5.1.5 Verweisparameter

  • 10.5.1.2 Verweisparameter

Anzeigen: