Typdefinitionen

Aktualisiert: November 2007

Neue Typen werden aus vorhandenen Typen definiert. Integrierte Werttypen, Zeiger, Arrays und Delegaten werden bei ihrer Verwendung definiert und als implizite Typen referenziert. Typen können geschachtelt werden, d. h., sie können Member eines anderen Typs sein.

Eine Typdefinition hat folgende Bestandteile:

  • Alle für den Typ definierten Attribute.

  • Die Sichtbarkeit des Typs.

  • Den Typnamen.

  • Den Basistyp des Typs.

  • Alle durch den Typ implementierten Schnittstellen.

  • Definitionen für jeden Member des Typs.

Attribute

Durch Attribute werden zusätzliche benutzerdefinierte Metadaten bereitgestellt. Attribute können auf beinahe jedes Sprachelement angewendet werden – Typen, Eigenschaften, Methoden usw.

Typzugriff

Alle Typen verfügen über einen Zugriffsmodifizierer, der regelt, welche anderen Typen auf diesen Typ zugreifen können. In der folgenden Tabelle werden die von der Laufzeit unterstützten Zugriffsarten auf Typen beschrieben.

Zugriff

Beschreibung

public

Auf diesen Typ kann von allen Assemblys zugegriffen werden.

assembly

Auf diesen Typ kann nur innerhalb der Assembly zugegriffen werden.

Der Zugriff auf einen geschachtelten Typ hängt von seiner Zugriffsdomäne ab, die sowohl durch den deklarierten Zugriffstyp des Members als auch durch die Zugriffsdomäne des direkt enthaltenden Typs bestimmt wird. Die Zugriffsdomäne eines geschachtelten Typs kann jedoch nicht über die des enthaltenden Typs hinausgehen.

Die Zugriffsdomäne eines geschachtelten Members M, der in einem Typ T innerhalb eines Programms P deklariert ist, wird wie folgt definiert (wobei M selbst ein Typ sein kann):

  • Wenn die deklarierte Zugriffsart von M den Wert public hat, entspricht die Zugriffsdomäne von M der von T.

  • Wenn die deklarierte Zugriffsart von M den Wert protected internal hat, entspricht die Zugriffsdomäne von M der Schnittmenge zwischen der Zugriffsdomäne von T, dem Programmtext von P und dem Programmtext jedes Typs, der von T abgeleitet und außerhalb von P deklariert wurde.

  • Wenn die deklarierte Zugriffsart von M den Wert protected hat, entspricht die Zugriffsdomäne von M der Schnittmenge zwischen der Zugriffsdomäne von T, dem Programmtext von T und jedem von T abgeleiteten Typ.

  • Wenn die deklarierte Zugriffsart von M den Wert internal hat, entspricht die Zugriffsdomäne von M der Schnittmenge zwischen der Zugriffsdomäne von T und dem Programmtext von P.

  • Wenn die deklarierte Zugriffsart von M den Wert private hat, entspricht die Zugriffsdomäne von M dem Programmtext von T.

Typnamen

Das allgemeine Typsystem sieht lediglich zwei Namenseinschränkungen vor:

  1. Alle Namen werden als Unicode-Zeichenfolgen (16-Bit-Zeichen) codiert.

  2. Ein eingebetteter Wert von 0x0000 (16 Bits) ist für Namen nicht zulässig.

Alle Vergleiche erfolgen byteweise, sie berücksichtigen daher die Groß-/Kleinschreibung und sind unabhängig vom Gebietsschema.

Obwohl ein Typ auf Typen aus anderen Modulen und Assemblys verweisen kann, wird er vollständig innerhalb eines Moduls definiert. Typnamen müssen nur innerhalb einer Assembly eindeutig sein. Um einen Typ vollständig zu identifizieren, muss der Typname durch die Assembly gekennzeichnet werden, die die Typimplementierung enthält. Weitere Informationen finden Sie unter Angeben vollständig gekennzeichneter Typnamen.

Basistypen und Schnittstellen

Ein Typ kann Werte und Verhaltensdefinitionen von anderen Typen erben. Gemäß dem allgemeinen Typsystem können Typen nicht von mehr als einem Basistyp erben.

Ein Typ kann eine beliebige Anzahl von Schnittstellen implementieren. Zur Implementierung einer Schnittstelle muss ein Typ alle virtuellen Member der betreffenden Schnittstelle implementieren. Eine virtuelle Methode kann durch einen abgeleiteten Typ implementiert und entweder statisch oder dynamisch aufgerufen werden. Weitere Informationen über virtuelle Member finden Sie unter Typmember. Weitere Informationen über Vererbung und Schnittstellen finden Sie unter Klassen und Schnittstellen.

Typmember

Das Verhalten und der Zustand eines Typs wird durch seine Member definiert: Ereignisse, Felder, geschachtelte Typen, Methoden und Eigenschaften. Weitere Informationen finden Sie unter Typmember.

Siehe auch

Konzepte

Typmember

Weitere Ressourcen

Allgemeines Typsystem

Assemblys in der Common Language Runtime (CLR)

Erweitern von Metadaten mithilfe von Attributen