Heim >Backend-Entwicklung >C++ >Wann und warum wird „ref' mit Referenztypvariablen in C# verwendet?
Verstehen der Verwendung von „ref“ mit Referenztypvariablen in C#
Obwohl klar ist, dass das Schlüsselwort „ref“ uns dies ermöglicht Wenn Sie einen Verweis auf Werttypvariablen nach Wert übergeben, ist seine Bedeutung bei Referenztypen möglicherweise weniger offensichtlich. In diesem Artikel werden die spezifischen Anwendungsfälle von „ref“ mit Variablen vom Referenztyp untersucht.
Betrachten Sie die folgende Klasse:
public class Foo { public string Name; public Foo(string name) { Name = name; } }
Übergabe einer Variablen vom Referenztyp nach Wert vs. Referenz:
Ohne das Schlüsselwort „ref“ wird beim Übergeben einer Referenztypvariablen (z. B. „x“) an eine Methode immer noch eine Referenz übergeben. keine Kopie. Dies bedeutet, dass die Methode das ursprüngliche Objekt bearbeitet. Zum Beispiel:
var x = new Foo("1"); void Bar(Foo y) { y.Name = "2"; } Bar(x); // changes the Name property of the original object
Verwenden von „ref“ zum Ändern der Referenz einer Referenztypvariablen:
Allerdings das Schlüsselwort „ref“ mit Referenztyp Variablen dienen einem bestimmten Zweck: Sie ermöglichen es uns, die Referenz der Variablen innerhalb der Methode zu ändern. Zum Beispiel:
Foo foo = new Foo("1"); void Bar(ref Foo y) { y = new Foo("2"); // creates a new object and assigns it to y } Bar(ref foo); // changes the reference of 'foo' to point to the new object
In diesem Fall verweist „foo“ nach dem Aufruf von „Bar(ref foo)“ nicht mehr auf das ursprüngliche Objekt, sondern stattdessen auf das neu erstellte Objekt mit der Name-Eigenschaft „2 ".
Praktische Anwendung:
Diese Funktionalität kann in Szenarien nützlich sein, in denen wir ein neues Objekt von einer Methode zurückgeben möchten, ohne dies zu tun um die Referenz explizit als Out-Parameter zurückzugeben. Beispielsweise könnten wir eine Methode erstellen, die das erste Element in einer Liste findet und zurückgibt, das ein bestimmtes Kriterium erfüllt:
public static T FindFirst<T>(List<T> list, Func<T, bool> predicate) where T : class { foreach (T item in list) { if (predicate(item)) return item; } return null; }
Durch die Verwendung des Schlüsselworts „ref“ in dieser Methode können wir vermeiden, ein Element erstellen zu müssen out-Parameter, während das gefundene Objekt weiterhin zurückgegeben werden kann.
Das obige ist der detaillierte Inhalt vonWann und warum wird „ref' mit Referenztypvariablen in C# verwendet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!