Heim >Backend-Entwicklung >C++ >Wie kann ich Referenzen pflegen, wenn ich Klassenfeldern in C# Werte zuweise?

Wie kann ich Referenzen pflegen, wenn ich Klassenfeldern in C# Werte zuweise?

Linda Hamilton
Linda HamiltonOriginal
2025-01-06 01:57:39302Durchsuche

How Can I Maintain References When Assigning Values to Class Fields in C#?

Beibehalten von Referenzen in Klassenfeldzuweisungen in C#

Beim Versuch, einem Klassenfeld einen Wert per Referenz zuzuweisen, kann es zu unerwartetem Verhalten kommen. Im bereitgestellten Beispiel führte die Zuweisung eines „Ref-Parameters“ zu einem Feld zu einem Referenzverlust.

Verstehen der Einschränkung

C# schränkt die Deklaration von Feldern als Referenzen ein Variablen. Dies ist auf mögliche Konsequenzen zurückzuführen:

  1. Das Zulassen von Referenzfeldern könnte zu unsicheren Situationen führen, in denen der Speicher für die referenzierte Variable nicht mehr zugänglich ist, nachdem die Variable den Gültigkeitsbereich verlässt.
  2. Um Referenzen beizubehalten In Feldern müsste die CLR Speicher für lokale Variablen auf dem Garbage-Collected-Heap zuweisen, was Auswirkungen hätte Optimierung.

Überwindung der Einschränkung

Obwohl ein echtes Referenzfeld nicht möglich ist, gibt es Alternativen:

Option 1 : Erstellen Sie eine Wrapper-Klasse

Sie können eine Wrapper-Klasse erstellen, die den referenzierten Wert als Eigenschaft enthält. Die Klasse kann Methoden zum Abrufen und Festlegen des Werts bereitstellen und so die Referenz effektiv beibehalten.

public class Wrapper
{
    public int Value { get; set; }
}
...
Wrapper wrapper = new Wrapper { Value = 123 };

Option 2: Lambda-Ausdrücke verwenden

Sie können Lambda-Ausdrücke verwenden, um Definieren Sie einen Getter und Setter für eine referenzierte Variable. Dadurch wird der Variablen über einen Delegaten eine Referenz zugewiesen.

public delegate int Getter();
public delegate void Setter(int value);
...
Getter getter = () => y;
Setter setter = z => { y = z; };

Fazit

Durch Verständnis der Gründe für die Ref-Feldbeschränkung und Verwendung alternativer Techniken wie Wrapper-Klassen oder Lambda-Ausdrücke ist es möglich, in C# ein referenzähnliches Verhalten bei Klassenfeldzuweisungen zu erreichen.

Das obige ist der detaillierte Inhalt vonWie kann ich Referenzen pflegen, wenn ich Klassenfeldern in C# Werte zuweise?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn