Referenzzuweisungen in C#-Klassenfeldern
In C# kann der Versuch, eine Zuweisung per „Referenz“ auf ein Klassenfeld vorzunehmen, zu unerwartetem Verhalten führen. Betrachten Sie den folgenden Code:
public class X { public X() { string example = "X"; new Y(ref example); new Z(ref example); System.Diagnostics.Debug.WriteLine(example); } } public class Y { public Y(ref string example) { example += " (Updated By Y)"; } } public class Z { private string _Example; public Z(ref string example) { this._Example = example; this._Example += " (Updated By Z)"; } } var x = new X();
Die erwartete Ausgabe ist „X (Updated By Y) (Updated By Z)“, aber stattdessen wird nur „X (Updated By Y)“ gedruckt. Dieses Verhalten tritt auf, weil beim Zuweisen eines „Ref-Parameters“ zu einem Feld die Referenz verloren geht.
Warum können Felder keine Referenzen enthalten?
Es gibt nur drei mögliche Optionen, wenn Berücksichtigung von Feldern vom Typ „Ref“:
Option 1 wurde gewählt, um die Programmstabilität sicherzustellen und die Entstehung von Zeitbomben im Code zu verhindern.
So erreichen Sie referenzähnliches Verhalten
Während Sie keine Felder vom Typ „ref“ haben können, gibt es alternative Möglichkeiten, referenzähnliche Felder zu erreichen Verhalten:
Das obige ist der detaillierte Inhalt vonWarum lässt C# nicht zu, dass Felder Referenzen enthalten, und welche Alternativen gibt es?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!