Es gibt wahrscheinlich eine ziemlich logische Erklärung dafür, aber ich habe eine Frage.
Nehmen wir an, ich habe eine Variable vom Typ Rectangle namens _rect. Ich kann jetzt sagen _rect.X = 50; ohne Probleme.
Jetzt habe ich eine Klasse mit einer Eigenschaft namens Rect, die die interne Variable _rect verfügbar macht.
Wenn ich dann versuche, Rect.X = 50;
zu schreiben, bekomme ich folgenden Kompilierungsfehler:
Kann den Rückgabewert von 'TestClass.Rect' nicht ändern, da es keine Variable ist.
Ich kann Rect = new Rectangle( 50, Rect.Y, Rect.Width, Rect.Height)
like für einen unveränderlichen Typ schreiben, aber für nicht unveränderliche Typen gibt es andere Möglichkeiten, dies zu tun?
Ich möchte Auto-Eigenschaften für dieses Rechteckfeld verwenden, aber es ist wirklich ärgerlich, es in der Klasse selbst nicht ändern zu können.
Gibt es einen Weg, ein Backing-Feld zu erstellen und die Auto-Eigenschaft zu löschen?
Der Grund für diesen Fehler liegt darin, dass Rectangle ein Werttyp ist ( struct) im Gegensatz zu Referenztypen (Klassen). Sie können die Eigenschaft X
nicht ändern, da bei Verwendung des Getter-Objekts Rect
ein neuer Wert für das Rechteck zurückgegeben wird (der Getter ist eine Funktion). Wenn es sich um einen Referenztyp handelt, manipulieren Sie den Zeiger und dies wäre möglich.
Dies ist ein wichtiger Aspekt von Werten gegenüber Referenztypen, die beachtet werden müssen.
Der Zugriff auf die Eigenschaft ist in Wirklichkeit ein Funktionsaufruf, der eine Kopie des Werttyps zurückgibt. Rect.X = 50; würde nur diese temporäre Kopie modifizieren, nicht das Backing-Feld selbst.
Wenn die Eigenschaft nicht automatisch implementiert wird, können Sie eine zusätzliche Eigenschaft RectX erstellen, die zum Abrufen und Festlegen der X-Eigenschaft des Rechtecks verwendet werden kann.