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