Ich frage mich, wie man Daten in der Klasse bedingt verstecken kann. Zum Beispiel sagen wir, ich habe eine Klasse namens Car, die drei Felder hat: Engine, MeterReading und Kilometerstand.Wie bedingte Kapselung in C implementieren #
Ich habe drei andere Einheiten namens: Fahrer, Mechaniker und Passagier. Nun, was ich will, ist, dass:
Ein Treiber sollte nur in der Lage sein, Kilometerstand zugreifen (und nicht Motor und Meterreading)
Ein Mechaniker sollte nur in der Lage sein, Motor und Kilometerstand zu gelangen (und Meterreading nicht)
Ein Fahrgast sollte nur auf MeterReading zugreifen können (und nicht auf Motor und Kilometer).
Was könnte der beste Weg sein, dies zu implementieren ... (ohne die ganze Logik auf andere Anweisungen zu stützen)?
Irgendwelche Ideen Leute?
Danke.
Natürlich sollte darauf hingewiesen werden, dass dies nur vor Unfällen während der Codierung schützt, aber es ist keine Sicherheitsmaßnahme gegen feindliche Clients, da der Client-Code immer noch eine Instanz von "IUsableByPassenger" auf "Car" und dann auf "IUsableByMechanic" werfen kann und alle anderen. – Timwi
Sicher, aber es gibt keine Möglichkeit, das zu vermeiden, wenn irgendein Objekt in der Lage ist, mehr als nur ausgesetzt zu tun. Man kann immer Reflektion verwenden, um einen Typ zu finden, lesen Sie Privates usw. – NOtherDev
@A: Es ist möglich, nicht vertrauenswürdigen Client-Code von der Verwendung von Reflektion zu verhindern, aber nicht, einfaches Casting zu verhindern. – Timwi