Advanced Services | Accessmodifier für Methoden und Daten |
Es gibt in C# vier Zugriffsmodifiziere oder Accessmodifier und fünf verschiedene Zugriffsstufen. Die entsprechenden Schlüsselwörter heißen private, public, protected und internal. Da man protected und internal zudem kombinieren kann ergeben sich so fünf verschiedenen Zugriffsstufen. Außerdem kann man die Zugriffsmodifizierer auch weglassen und es ist daher noch zu klären, welcher Schutzzustand per Derfault eingestellt ist. Innerhalb einer Klasse spielen diese Modifizierer keine Rolle. In einer Klasse sind die Elemente des Datenteils überall bekannt. Es geht immer nur um die Sichtbarkeit von außen.
Da man einen Accessmodifier auch für Klassen anwenden kann, beschränken wir uns zunächst auf Methoden und Daten einer Klasse.
Mit diesem Accessmodifier beschränkt man die Sichtbarkeit von Daten und Methoden auf die eigene Klasse.
Andere Klassen, auch abgeleitete Klassen können nicht auf diese Elemente zugreifen. Auch Objekte der
eigenen Klasse können nicht mit Hilfe des Punktoperators auf diese Elemente zugreifen.
Wichtig:
private ist die Defaulteinstellung und kann bei Methoden und Daten weggelassen werden
(was natürlich die Lesbarkeit verschlechtert) !
Der Accessmodifier public ist, wenn man so will, das genaue Gegenteil von private. Über ein Objekt dieser Klasse kann man über den Punktoperator auf Daten und Methoden jederzeit zugreifen und sie manipulieren. Jeglicher Schutz ist aufgehoben.
Etwas raffinierter ist der Modifier protected. Damit erlaubt der Programmierer dieser Klasse den Zugriff auf Daten und Methoden in einer von dieser Klasse abgeleiteten Klasse. Während man sich also über Vererbung Zugriff auf protected Daten und Methoden verschaffen kann ist dies über Objekte nicht möglich. Über den Punktoperator ist kein Zugriff auf protected Elemente möglich. Nach außen sind also protected Elemente nicht sichtbar.
Für den Schutzzustand internal muß man mit dem Begriff Assembly vertraut sein. Siehe dazu das Kapitel über Assemblies. Ein Assembly ist eine Sammlung von Klassen, die in einer DLL gekapselt sind. Mit Hilfe des Modifiers internal können Entwickler die Sichtbarkeit von Datenelementen und Methoden auf die Klassen in einem Assembly beschränken. Alle Klassen in einem Assembly können damit über Objekte und den Punktoperator auf internal Daten und Methoden zugreifen. Außerhalb des Assemblies sind diese Methoden und Daten nicht sichtbar. Ob die Klassen in Vererbung stehen spielt keine Rolle.
Dieser Schutzzustand kombiniert die beiden Zustände protected und internal. Sowohl Klassen, die sich von der betrachteten Klasse ableiten als auch alle Klassen in einem Assembly haben Zugriff auf diese Daten und Methoden. Der Schutz durch diese Kombination ist also schwächer als protected und internal alleine. Obwohl man hierfür gern das umgangssprachliche "und" verwendet, ist es vom logischen Standpunkt aus gesehen eine "oder"-Verknüpfung.