Entwickler-Ecke
C# - Die Sprache - Wie kann man eine "echte" Read-Only Eigenschaft erstellen?
Ares - Do 21.10.10 17:09
Titel: Wie kann man eine "echte" Read-Only Eigenschaft erstellen?
Hallo!
Ich stehe gerade vor dem Problem, wie eine Klasse sicherstellen kann, dass eine Eigenschaft nicht verändert wird. Klar, dafür gibt es Getter und Setter, und wenn nur ein Getter vorhanden ist, ist die Eigenschaft read-only. Aber so einfach ist es dann doch nicht:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| public class Reifen { public int Druck; }
public class Auto { private Reifen reifenVorneLinks;
public Auto() { reifenVorneLinks = new Reifen(); reifenVorneLinks.Druck = 10; }
public Reifen ReifenVorneLinks { get { return reifenVorneLinks; } } }
... Auto meinAuto = new Auto(); Reifen irgendeinReifen = new Reifen();
meinAuto.ReifenVorneLinks = irgendeinReifen;
meinAuto.ReifenVorneLinks.Druck = 20; |
Read-Only gilt also nur für eine Eigenschaft, aber nicht für die Eigenschaften dieser Eigenschaft :-)
Wie müsst man in diesem Beispiel vorgehen, wenn das ein Auto-Objekt sicherstellen will, dass zwar der linke Vorderreifen öffentlich zugänglich sein soll, aber der Reifendruck nur vom Auto-Objekt selbst verändert werden kann?
Besten Dank
Ares
Kha - Do 21.10.10 18:00
Das lässt sich überhaupt nicht verhindern, da Objekte keinen "Besitz" anderer Objekte festlegen können und so jede Referenz gleichberechtigten Zugriff besitzt. In einer öffentlichen API würde man Druck wahrscheinlich als public get; internal set; festlegen und dann zum Setzen eine public Eigenschaft in Auto erstellen.
Yogu - Do 21.10.10 18:12
Je nachdem, was Reifen noch so beinhaltet, könntest du die Klasse auch immutable, also unveränderlich machen. Das heißt, ihre Eigenschaften können von niemandem, nichtmal von ihr selbst geändert werden. Um den Reifendruck zu ändern, muss man einen neuen Reifen instanzieren und ihm im Konstruktur den Druck übergeben.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!