Übergeben Sie a, ref
wenn Sie das Objekt ändern möchten:
TestRef t = new TestRef();
t.Something = "Foo";
DoSomething(ref t);
void DoSomething(ref TestRef t)
{
t = new TestRef();
t.Something = "Not just a changed t, but a completely different TestRef object";
}
Bezieht t
sich nach dem Aufruf von DoSomething nicht auf das Original new TestRef
, sondern auf ein völlig anderes Objekt.
Dies kann auch nützlich sein, wenn Sie den Wert eines unveränderlichen Objekts ändern möchten, z string
. B. a . Sie können den Wert von a nach seiner string
Erstellung nicht mehr ändern . Mit a ref
können Sie jedoch eine Funktion erstellen, die die Zeichenfolge für eine andere mit einem anderen Wert ändert.
Bearbeiten: Wie andere Leute erwähnt haben. Es ist keine gute Idee, es zu verwenden, es ref
sei denn, es wird benötigt. Wenn Sie ref
der Methode die Freiheit geben, das Argument für etwas anderes zu ändern, müssen Aufrufer der Methode codiert werden, um sicherzustellen, dass sie diese Möglichkeit nutzen.
Wenn der Parametertyp ein Objekt ist, fungieren Objektvariablen immer als Verweise auf das Objekt. Dies bedeutet, dass Sie bei Verwendung des ref
Schlüsselworts einen Verweis auf einen Verweis haben. Auf diese Weise können Sie die im obigen Beispiel beschriebenen Schritte ausführen. Wenn der Parametertyp jedoch ein primitiver Wert ist (z. B. int
), wird der Wert des übergebenen Arguments nach der Rückgabe der Methode geändert, wenn dieser Parameter innerhalb der Methode zugewiesen wird:
int x = 1;
Change(ref x);
Debug.Assert(x == 5);
WillNotChange(x);
Debug.Assert(x == 5); // Note: x doesn't become 10
void Change(ref int x)
{
x = 5;
}
void WillNotChange(int x)
{
x = 10;
}