C# Getter/Setter-problem
Sagen, dass ich eine Eigenschaft in einer Klasse:
Vector3 position{get; set;}
Also ich erstelle eine Instanz der Klasse irgendwo ... und jetzt möchte ich, um die position zu ändern.x, das wäre jetzt unmöglich, weil die getter-und setter-set und bekommen Sie das gesamte Objekt. So habe ich, um vorübergehende Vector3 dessen Werte ändern und dann zuweisen.
Normalerweise würde ich position einem öffentlichen Bereich, so dass problem wäre gelöst. Aber ich kann nicht es in diesem Fall, weil die position ist eine Implementierung von einem interface und Schnittstellen nicht über Felder.
So, wie kann ich das Problem lösen das der beste Weg.
Edit: Vector3 ist eine Struktur, so ist es ein Wert-Typ
Du musst angemeldet sein, um einen Kommentar abzugeben.
IMO die einfachste Antwort hier:
Wechseln Sie nun in
obj.X
,obj.Y
undobj.Z
wenn Sie nur ändern müssen, eine dimension, oder ändernobj.Position
um alles zu ändern.Wenn Sie den Namen
position
eine Schnittstelle implementieren, dann tun Sie es explizit:Position
und direkt ändernposition.X
imX
Eigenschaft.position
als das Feld und führen Sie die explizite interface-Implementierung gemäß der bit, die ich am Ende eingefügt?Ist die einfachste Lösung irgendwie nicht in Ordnung sind?
Was ist falsch mit, dass? Es scheint vollkommen unkompliziert.
Das ist eine der Fragen, die mit veränderlichen value-Typen. Sie können eine neue Instanz erstellen, der den Wert geben Sie mit den neuen
X
Wert und weisen Sie in der Eigenschaft. Sie können die Instanz-Erstellung einfacher durch eine sinnvolle Konstruktoren oder Methoden hinzufügen, die eine modifizierte Objekt (anstelle der änderung des Wertes).Vector3
einer Klasse (das ist wahrscheinlich weniger als ideal) oder Methoden bereitstellen, ändern der position in der Benutzeroberfläche (mit Dingen wieMoveHorizontally(float distance)
) oder einfach nur die Kunden weisen Sie die Eigenschaft wieobj.Position = new Vector3(obj.Position.X + 10, obj.Position.Y, obj.Position.Z);
. Dieses problem hat nicht wirklich eine bessere Lösung (das kanonische Beispiel ist die Windows-Formulare mit derLocation
undSize
Eigenschaften derControl
Klasse).Vector3
war ein Typ der Referenz, die Sie könnte leicht tunobj.Position.X += 10;
ohne Probleme und Sie hätten keine Probleme.Vector3
ist selbst eine Klasse.Vector3
und nicht die enthaltende Klasse.