Skip to content

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:


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).

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.

Properties in C# kombinieren Getter- und Setter-Methoden und können individuell mit Zugriffsmodifizierern versehen werden:

public string Name { get; set; }
  • Mit public ist die Property von überall les- und schreibbar.
  • Zugriffsbeschränkungen können für Getter und Setter unterschiedlich sein:
public string Name { get; private set; }
  • In diesem Fall kann die Property von überall gelesen, aber nur von der Klasse selbst gesetzt werden.

Properties ohne Setter können nur gelesen werden:

public string Name { get; }
  • Der Wert wird meist durch einen Konstruktor oder initiale Zuweisung festgelegt:
public string Name { get; } = "Default";

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.

private int _age;
public int Age
{
get => _age;
set
{
if (value >= 0)
_age = value;
}
}

Ab C# 9.0 eingeführt, können diese während der Objektinitialisierung gesetzt, aber danach nicht mehr geändert werden:

public string Name { get; init; }

Verwendung:

var person = new Person { Name = "John" }; // erlaubt
person.Name = "Doe"; // nicht erlaubt

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.