ref (C#-Referenz)
Aktualisiert: November 2007
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 unterscheidet sich von out, dessen Argumente nicht explizit initialisiert werden müssen, bevor sie übergeben werden. Weitere 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(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 RefOverloadExample
{
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.
Weitere Informationen zum Übergeben von Arrays finden Sie unter Übergeben von Arrays mithilfe von "ref" und "out" (C#-Programmierhandbuch).
Beispiel
Das oben veranschaulichte Übergeben von Werttypen als Verweis ist nützlich, aber ref kann auch zum Übergeben von Referenztypen 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 Referenztyp als ref-Parameter übergeben wird.
class RefExample2
{
static void Method(ref string s)
{
s = "changed";
}
static void Main()
{
string str = "original";
Method(ref str);
Console.WriteLine(str);
}
}
// Output: changed
C#-Programmiersprachenspezifikation
Weitere Informationen finden Sie in den folgenden Abschnitten von C#-Programmiersprachenspezifikation:
5.1.5 Verweisparameter
10.6.1.2 Verweisparameter
Siehe auch
Konzepte
Referenz
Übergeben von Parametern (C#-Programmierhandbuch)
Methodenparameter (C#-Referenz)