Advanced  Services Modifizierer für Klassen Back Next Up Home


Zugriffsmodifizierer für Klassen

Für Klassen gibt es die Zugriffsmodifizierer public, internal und static. Auch hier ist zu klären, was die Defaulteinstellung ist.


public

Wird dieser Zugriffsmodifizierer verwendet, so unterliegt die Klasse keine Einschränkung der Sichtbarkeit.


internal

Für den Schutzzustand internal gilt das gleiche wie bei Methoden und Daten. Die Klasse ist also nur innerhalb eines Assemblies bekannt.
Wichtig:
internal ist die Defaulteinstellung für Klassen und kann demnach auch weggelassen werden (was natürlich die Lesbarkeit verschlechtert) !


sealed

Mit sealed kann man eine Vererbungshierarchie beenden. Erklärt man eine Klasse als sealed, so kann keine Klasse mehr von dieser Klasse erben. Natürlich ist dann die Kombination von sealed und abstract nicht zulässig. Weitere Einschränkungen gibt es für versiegelte Klassen nicht.

public sealed class Versiegelt : BeliebigeKlasse
{
   // code
}

Der Versuch von einer versiegelten Klasse zu erben wird vom Compiler mit der Fehlermeldung "cannot derive from sealed type" beantwortet.

Im Gegensatz zu "partial" kann ein struct nicht "sealed" sein.

Hinweis: Für Methoden kann sealed nur in der Kombination mit override eingesetzt werden, also in der Form "override sealed".


static

Eine statische Klasse kann nur statische Methoden enthalten. Die Methoden sind nicht implizit statisch, das Schlüsselwort static muß also für jede Methode angegeben werden. Da die Konstruktoren spezielle Methoden darstellen, gibt es auch keine Konstruktoren (auf Instanzebene). Zulässig ist jedoch ein statischer Konstruktor, allerdings ohne Zugriffsmodifizierer.

Genauso verhält es sich für den Datenteil. Es sind nur statische Daten erlaubt und das Schlüsselwort static muß explizit angegeben werden.

Eine statische Klasse ist, wenn man so will, eine spezielle Form einer versiegelten Klasse, den sie kann nicht als Elternklasse einer anderen Klasse dienen. Die zusätzliche Angabe des Schlüsselwortes "sealed" ist nicht erlaubt.

Umgekehrt muß sich eine statische Klasse immer von der Klasse Object ableiten und kann daher auch nicht als Kindklasse einer anderen Klasse außer Object auftreten.

Die Kombination abstract und statisch ist natürlich nicht zulässig, da widersprüchlich.

Innerhalb einer statischen Klasse ist der Zugriffsmodifizierer nicht erlaubt, da eine statische Klasse nicht erben kann, ist er auch nicht sinnvoll.


partial

"sealed" und "static" sind Accessmodifier, da sie die Vererbung beeinflussen bzw. verhindern. "partial" dagegen ist ein Modifizierer der lediglich praktische Gründe hat und der Übersichtlichkeit des Codes dient.

In C# kann man den Entwurf einer Klasse in mehrere Teile zerlegen. Dies geschieht etwa automatisch bei GUI-Buildern. Erstellt man in Visualstudio eine graphische Anwendung, so der Klassenentwurf in zwei Teile zerlegt, von denen einer vom Gui-Builder erstellt wird und der andere nur als leere Hülle erzeugt wird, die vom Programmier zu füllen ist. Bei Konsolanwendungen kann man verwendet man dieses Konzept eher selten. Die Vorgehensweise ist sehr einfach. Man schreibt zwei (oder auch mehr) Klassenrahmen mit demselben Namen und ergänzt jedesmal das Schlüsselwort "partial" vor der Klasse. Im folgenden einfachen Beispiel zerlegen wir die Klasse "Divided" in mehrere (leere) Teile.

partial class Divided
{
}

partial class Divided
{
}

partial class Divided
{
}

Der Modifier partial kann übrigens auch für structs verwendet werden, das folgende ist also ohne weiteres möglich. Ob man es aber braucht...

partial struct Divided
{
}

partial struct Divided
{
}

partial struct Divided
{
}
Valid XHTML 1.0 Strict top Back Next Up Home