Modifizierer

Aus Das Sopra Wiki
Wechseln zu: Navigation, Suche


Auf alle oben besprochenen Elemente kann nur zugegriffen werden, wenn eine Instanz der jeweiligen Klasse erzeugt worden ist. Dies gilt für Klassenfelder, Methoden und Klassen selbst. Es gibt jedoch auch die Möglichkeit, auf Methoden oder Felder zuzugreifen, ohne, dass die Klasse, in der sie sich befinden, instantiiert wurde. Diese Felder und Methoden heißen statisch. Diese Felder existieren nur einmal, nämlich auf Klassenebene.

Statische Elemente werden definiert, in dem vor ihre Deklaration das Schlüsselwort static hinzugefügt wird. Im folgenden Beispiel wird die Benutzung von statischen Feldern einer klasse deutlich:

class Fahrzeug : IDisposable
{
   public static int instances = 0;

   public Fahrzeug()
   {
      instances++;
   }

   public void Dispose()
   {
      instances--;
   }

   public void PrintFahrzeugCounter()
   {
      Console.WriteLine("Es gibt im Moment " + Fahrzeug.instances + " Fahrzeuge.");
   }
}

Wird hier ein Objekt vom Typ Fahrzeug erzeugt, so wird der Zähler für die Instanzen um eins erhöht. Jedes Fahrzeug hat dann die Möglichkeit, die aktuelle Anzahl aller vorhandenen Fahrzeuge auszugeben. Auf die Anzahl der Fahrzeuge können alle Fahrzeug-Objekte gleichzeitig zugreifen, da sie Statisch definiert ist. Vom Interface IDisposable mit seiner Methode Dispose() wurde lediglich abgeleitet, um den Zähler der Fahrzeuginstanzen herunter zu zählen, sobald ein Fahrzeugobjekt im Speicher zerstört wird.

Eine weitere nützliche Verwendung der statischen Eigenschaften zeigt sich im Singleton-Pattern.

Neben public, private und static gibt es noch weitere Modifizierer, die in C# verwendet werden können.

Modifizierer Verwendungszweck / Bedeutung
public Zugriff/Sichtbarkeit. Elemente, die als public deklariert sind, sind von außerhalb der Klasse sichtbar, d.h. auf diese Member kann zugegriffen werden.
private Zugriff/Sichtbarkeit. Auf Elemente, die als private deklariert sind, kann nur aus der Klasse heraus zugegriffen werden, in der sie deklariert sind. Der Zugriff aus von der Klasse abgeleiteten Klassen ist ebenfalls nicht möglich.
internal Zugriff/Sichtbarkeit. Der Zugriff auf ein als internal deklariertes Element ist nur aus Dateien der gleichen Assembly heraus möglich. Dieser Zugriffsmodifizierer kann mit protected kombiniert werden.
protected Zugriff/Sichtbarkeit. Der Zugriff auf ein als protected deklariertes Element ist nur von innerhalb der Klasse oder innerhalb einer abgeleiteten Klasse möglich. Dieser Modifizierer kann mit internal kombiniert werden.
abstract Als abstrakt werden unvollständige Member einer Klasse bezeichnet, beispielsweise Methoden ohne konkrete Implementierung. Dadurch wird die Klasse selbst automatisch ebenfalls abstrakt. Von abstrakten klassen kann/darf keine Instanz erzeugt werden, sie erzwingen, dass eine andere Klasse abgeleitet wird.
event Der Modifizierer event wird oftmals fälschlicherweise als herkömmliches Schlüsselwort bzw. reserviertes Wort bezeichnet. Tatsächlich ist es so, dass durch event aus Delegates Ereignisse deklariert werden. Der Modifizierer hat Einfluss auf die Verwendungsmöglichkeit des damit bezeichneten Delegates.
extern Der Modifizierer extern bezieht sich auf Methoden. Er gibt an, dass die Methode nicht innerhalb des aktuellen Projekts, sondern in einer DLL des Betriebssystems deklariert ist. Dieser Modifizierer wird für das so genannte P/Invoke, den Zugriff auf WinAPI-Funktionen, verwendet.
override override dient zum Überschreiben einer Methode der Basisklasse, die als virtual bezeichnet ist und sowohl gleiche Signatur als auch gleiche Sichtbarkeit aufweisen muss.
readonly Der Modifizierer readonly ermöglicht Nur-Lese-Zugriffe auf öffentliche Instanzvariablen. Normalerweise sollte es aber keine öffentlichen Instanzvariablen geben, sonder der Zugriff immer über Eigenschaften erfolgen.
sealed sealed ist sozusagen das Gegenteil von abstract. Von einer "versiegelten" Klasse kann nicht abgeleitet werden. Bekanntester Vertreter solcher Klassen ist (zum Leidwesen vieler Programmierer) die Klasse String.
static Der Modifizierer static legt fest, dass der damit bezeichnete Member einer Klasse Bestandteil auf Klassenebene und nicht auf Instanzebene ist.
unsafe Der Modifizierer unsafe dient zum Erzeugen von "unsicherem" Code, also Code, der nicht von der Laufzeitumgebung kontrolliert wird und auf den auch die Garbage-Collection keine Einwirkung hat.
virtual Der Modifizierer virtual legt fest, dass ein damit bezeichneter Member in einer abgeleiteten Klasse überschrieben werden kann.
volatile volatile wird für Felder (Instanzvariablen) verwendet. Das so bezeichnete Feld kann vom Betriebssystem ausgelesen werden.
new Achtung - hier ist der Modifizierer new gemeint, nicht der Operator new zum Erzeugen einer neuen Instanz. Der Modifizierer new dient dazu, Member einer Klasse in einer davon abgeleiteten Klasse zu verdecken.