Unterschied zwischen dem Ändern einer Variablen und einer Eigenschaft

8

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?

    
Øyvind Bråthen 20.09.2010, 07:15
quelle

4 Antworten

10

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.

    
Darin Dimitrov 20.09.2010, 07:23
quelle
1

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.

    
Henrik 20.09.2010 07:22
quelle
0

Überprüfen Sie dies: Ссылка

    
Sidharth Panwar 20.09.2010 07:24
quelle
0
%Vor%     
explorer 20.09.2010 07:57
quelle

Tags und Links