Typmember

Aktualisiert: November 2007

Die Laufzeit ermöglicht die Definition von Membern des gewünschten Typs: Ereignisse, Felder, geschachtelte Typen, Methoden und Eigenschaften. Jeder Member verfügt über eine Signatur. In der folgenden Tabelle sind die in .NET Framework verwendeten Typmember aufgeführt.

Member

Beschreibung

Ereignis

Definiert ein Ereignis, auf das reagiert werden kann; definiert Methoden, mit denen das Ereignis ausgelöst und abonniert bzw. sein Abonnement aufgehoben werden kann. Häufig werden mithilfe von Ereignissen andere Typen über Zustandsänderungen informiert.

Feld

Beschreibt und enthält Teile des Typzustands. Felder können jedem von der Laufzeit unterstützten Typ entsprechen.

Geschachtelter Typ

Definiert einen Typ innerhalb des Gültigkeitsbereichs des umschließenden Typs.

Methode

Beschreibt die für den Typ verfügbaren Operationen. Eine Methodensignatur gibt die zulässigen Typen aller Argumente sowie des Rückgabewerts der Methode an.

Ein Konstruktor ist eine spezielle Methodenform, durch die neue Instanzen eines Typs erstellt werden.

Eigenschaft

Benennt einen Wert oder Zustand des Typs und definiert Methoden zum Abrufen oder Festlegen des Eigenschaftenwerts. Eigenschaften können primitive Typen, Auflistungen primitiver Typen, benutzerdefinierte Typen oder Auflistungen benutzerdefinierter Typen sein. Eigenschaften werden häufig verwendet, um die Unabhängigkeit der öffentlichen Schnittstelle eines Typs von seiner tatsächlichen Darstellung zu gewährleisten.

Merkmale von Membern

Das allgemeine Typsystem unterstützt Typmember, die eine Vielzahl unterschiedlicher Merkmale haben können. Zur Unterstützung all dieser Merkmale sind jedoch keine speziellen Sprachen erforderlich. In der folgenden Tabelle sind diese Membermerkmale beschrieben.

Merkmal

Anwendbar auf

Beschreibung

abstract

Methoden, Eigenschaften und Ereignisse

Der Typ stellt keine Methodenimplementierung bereit. Typen, die Methoden vom Typ abstract erben, und Typen, die Schnittstellen mit Methoden vom Typ abstract implementieren, müssen eine Implementierung für die Methode bereitstellen. Die einzige Ausnahme liegt vor, wenn der abgeleitete Typ selbst vom Typ abstract ist. Alle Methoden vom Typ abstract sind auch virtual.

private, family, assembly, family und assembly, family oder assembly oder public

Alle

Definiert die Zugriffsart des Members:

private

Zugriff nur innerhalb desselben Typs wie dem des Members oder innerhalb eines geschachtelten Typs möglich.

family

Zugriff innerhalb desselben Typs wie dem des Members und von abgeleiteten Typen möglich, die davon erben.

assembly

Zugriff nur in der Assembly möglich, in der der Typ definiert ist.

family und assembly

Zugriff nur von Typen möglich, die sowohl über den Zugriffstyp family als auch assembly verfügen.

family oder assembly

Zugriff nur von Typen möglich, die über den Zugriffstyp family oder assembly verfügen.

public

Zugriff von jedem Typ möglich.

final

Methoden, Eigenschaften und Ereignisse

Die virtuelle Methode kann in einem abgeleiteten Typ nicht überschrieben werden.

initialize-only

Felder

Der Wert kann lediglich initialisiert werden. Nach der Initialisierung ist kein Schreibzugriff möglich.

instance

Felder, Methoden, Eigenschaften und Ereignisse

Wenn ein Member nicht als static (C# und C++), Shared (Visual Basic), virtual (C# und C++) oder Overridable (Visual Basic) gekennzeichnet ist, handelt es sich um einen Instanzmember (es ist kein instance-Schlüsselwort vorhanden). Im Arbeitsspeicher befinden sich so viele Kopien dieser Member wie Objekte, von denen sie verwendet werden.

literal

Felder

Der dem Feld zugewiesene Wert ist ein fester, zur Kompilierungszeit bekannter Wert eines integrierten Werttyps. Literalfelder werden zeitweise auch als Konstanten bezeichnet.

newslot oder override

Alle

Definiert, wie der Member mit geerbten Membern interagiert, die dieselbe Signatur haben:

newslot

Geerbte Member mit derselben Signatur werden verdeckt.

override

Ersetzt die Definition einer geerbten virtuellen Methode.

Der Standardwert ist newslot.

static

Felder, Methoden, Eigenschaften und Ereignisse

Der Member gehört dem Typ an, mit dem er definiert wurde, und keiner bestimmten Instanz des Typs. Der Member existiert selbst dann, wenn keine Instanz des Typs erstellt wird, und wird von allen Instanzen des Typs gemeinsam genutzt.

virtual

Methoden, Eigenschaften und Ereignisse

Die Methode kann durch einen abgeleiteten Typ implementiert und entweder statisch oder dynamisch aufgerufen werden. Beim dynamischen Aufruf bestimmt der Typ der Instanz, durch die der Aufruf zur Laufzeit ausgeführt wird (und nicht der zur Kompilierungszeit bekannte Typ), welche Implementierung der Methode aufgerufen wird. Um eine Methode vom Typ virtual statisch aufzurufen, muss die Variable u. U. in einen Typ umgewandelt werden, der die gewünschte Methodenversion verwendet.

Überladen

Jeder Typmember verfügt über eine eindeutige Signatur. Methodensignaturen bestehen aus dem Methodennamen und einer Parameterliste (die Reihenfolge und Typen der Argumente der Methode). Solange die Signaturen unterschiedlich sind, können innerhalb eines Typs mehrere Methoden mit demselben Namen definiert werden. Wenn zwei oder mehrere Methoden mit demselben Namen definiert sind, wird von einer "überladenen" Methode gesprochen. In System.Char ist beispielsweise IsDigit überladen. Eine Methode nimmt Char an und gibt Boolean zurück. Die andere Methode nimmt String und Int32 an und gibt Boolean zurück. Parameterlisten können auch durch die varargs-Einschränkung gekennzeichnet werden, wodurch angegeben wird, dass die Methode eine variable Argumentliste unterstützt.

Vererben, Überschreiben und Verdecken von Membern

Ein abgeleiteter Typ erbt alle Member seines Basistyps. Dies bedeutet, dass diese Member für den abgeleiteten Typ definiert und verfügbar sind. Das Verhalten oder die Merkmale geerbter Member können auf zwei Weisen geändert werden:

  • Ein abgeleiteter Typ kann einen geerbten Member verdecken, indem er einen neuen Member mit derselben Signatur definiert. Dies kann z. B. geschehen, um einen Member, der zuvor als public deklariert war, als private zu definieren, oder um ein neues Verhalten für eine geerbte Methode zu definieren, die mit final gekennzeichnet ist.

  • Ein abgeleiteter Typ kann eine geerbte virtuelle Methode überschreiben. Die überschreibende Methode stellt eine neue Definition für die Methode bereit, die basierend auf dem Werttyp zur Laufzeit aufgerufen wird und nicht basierend auf dem zur Kompilierungszeit bekannten Variablentyp. Eine virtuelle Methode kann nur von einer Methode überschrieben werden, wenn die virtuelle Methode nicht als final gekennzeichnet ist und die neue Methode mindestens dieselben Zugriffstypen unterstützt wie die virtuelle Methode.

Siehe auch

Konzepte

Typdefinitionen

Weitere Ressourcen

Allgemeines Typsystem

Entwurfsrichtlinien für Member

Richtlinien für den Entwurf von Typen