Zugriffsmodifier
In C# spielen Zugriffsmodifizierer (Access Modifiers) eine wichtige Rolle beim Festlegen der Sichtbarkeit und des Zugriffs auf Klassen, Methoden und Properties. Hier ist eine Übersicht:
1. Klassen
Zugriffsmodifizierer bei Klassen bestimmen, wer die Klasse instanziieren oder darauf zugreifen kann:
public
: Die Klasse ist von überall aus sichtbar.internal
(Standard, wenn nichts angegeben): Die Klasse ist nur im gleichen Assembly sichtbar.private
: Nur innerhalb der umschließenden Klasse sichtbar (gilt für verschachtelte Klassen).
2. Methoden
Methodenmodifizierer bestimmen, wer die Methode aufrufen kann:
public
: Methode ist von überall zugreifbar.private
: Methode ist nur innerhalb der eigenen Klasse zugreifbar.protected
: Methode ist innerhalb der eigenen Klasse und abgeleiteter Klassen zugreifbar.internal
: Methode ist innerhalb des gleichen Assembly sichtbar.
3. Properties
Properties in C# kombinieren Getter- und Setter-Methoden und können individuell mit Zugriffsmodifizierern versehen werden:
3.1 Varianten von Properties
a) Standard-Properties
- Mit
public
ist die Property von überall les- und schreibbar. - Zugriffsbeschränkungen können für Getter und Setter unterschiedlich sein:
- In diesem Fall kann die Property von überall gelesen, aber nur von der Klasse selbst gesetzt werden.
b) Getter-Only Properties
Properties ohne Setter können nur gelesen werden:
- Der Wert wird meist durch einen Konstruktor oder initiale Zuweisung festgelegt:
c) Properties mit Backing Field
Ein Backing Field wird verwendet, um mehr Kontrolle über die Property zu haben.
Der Setter kann auf den zu setzenden Wert mit dem Schlüsselwort value
zugreifen.
e) Init-Only Properties
Ab C# 9.0 eingeführt, können diese während der Objektinitialisierung gesetzt, aber danach nicht mehr geändert werden:
Verwendung:
Zusammenfassung
Zugriffsmodifizierer in C# bieten Flexibilität und Kontrolle über die Sichtbarkeit von Klassen, Methoden und Properties. Besonders bei Properties ermöglicht die Kombination von Getter/Setter-Modifikatoren, Backing Fields und neuen Features wie init
eine granulare Kontrolle über den Zugriff.