Heim >Backend-Entwicklung >C++ >Warum können C#-Klassenfelder nicht per Referenz zugewiesen werden und wie kann dies umgangen werden?
Behalten von Referenzen beim Zuweisen zu einem Feld
In C# ist das Zuweisen per „Referenz“ zu einem Klassenfeld nicht möglich. Dies liegt daran, dass Felder nicht vom Referenztyp sein können. Dafür gibt es drei Hauptgründe:
Gründe für die Einschränkung:
Problemumgehung:
Trotz der Einschränkung gibt es eine zu simulierende Problemumgehung Referenzähnliches Verhalten:
Verwendung eines Delegaten und Aktion:
Erstellen Sie einen Delegaten mit einem Getter und Setter für den gewünschten Wert. Speichern Sie diesen Delegaten in einem Feld statt in einer Referenz. Zum Beispiel:
sealed class Ref<T> { private readonly Func<T> getter; private readonly Action<T> setter; public Ref(Func<T> getter, Action<T> setter) { this.getter = getter; this.setter = setter; } public T Value { get { return getter(); } set { setter(value); } } } ... Ref<int> x; void M() { int y = 123; x = new Ref<int>(() => y, z => { y = z; }); x.Value = 456; Console.WriteLine(y); // 456 }
In diesem Fall speichert x einen Delegaten, der den Wert von y abrufen und festlegen kann. Wenn Sie x.Value festlegen, ändert es y.
Das obige ist der detaillierte Inhalt vonWarum können C#-Klassenfelder nicht per Referenz zugewiesen werden und wie kann dies umgangen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!