Verweisklasse und Referenzstruktur (C++/CLI und C++/CX)

Die Erweiterungen ref class oder ref struct deklarieren eine Klasse oder Struktur, deren Objektlebensdauer automatisch verwaltet wird. Wenn auf das Objekt nicht mehr zugegriffen werden kann oder es den Bereich verlässt, wird der Arbeitsspeicher freigegeben.

Alle Laufzeiten

Syntax

class_access ref class name modifier : inherit_access base_type {};
class_access ref struct name modifier : inherit_access base_type {};
class_access value class name modifier : inherit_access base_type {};
class_access value struct name modifier : inherit_access base_type {};

Parameter

class_access
(Optional) Die Möglichkeit des Zugriffs auf die Klasse oder Struktur außerhalb der Assembly. Mögliche Werte sind public und private (private ist der Standardwert). Geschachtelte Klassen oder Strukturen können keinen class_access-Bezeichner haben.

name
Der Name der Klasse oder Struktur.

modifier
(Optional) abstract und sealed sind gültige Modifizierer.

inherit_access
(Optional) Die Möglichkeit des Zugriffs auf base_type. Die einzige zulässige Barrierefreiheit ist public (public ist die Standardeinstellung).

base_type
(Optional) Ein Basistyp. Jedoch kann ein Werttyp nicht als Basistyp dienen.

Weitere Informationen finden Sie in den sprachspezifischen Beschreibungen für diesen Parameter in den Abschnitten „Windows-Runtime“ und „Common Language Runtime“.

Hinweise

Die standardmäßige Barrierefreiheit eines Objekts, das mit bezugsklasse oder Wertklasse deklariert wird, ist private. Und die standardmäßige Elementbarrierefreiheit eines Objekts, das mit Verweisstruktur oder Wertstruktur deklariert wird, ist public.

Wenn ein Verweistyp von einem anderen Verweistyp erbt, dann müssen virtuelle Funktionen in der Basisklasse explizit überschrieben werden (mit override) oder ausgeblendet (mit new (neuer Slot in vtable)). Die abgeleiteten Klassenfunktionen müssen ebenfalls explizit als virtualgekennzeichnet werden.

Um zur Kompilierzeit zu erkennen, ob ein Typ eine ref class oder ref struct ist, oder eine value class oder value struct, verwenden Sie __is_ref_class (type), __is_value_class (type) oder __is_simple_value_class (type). Weitere Informationen finden Sie unter Compilerunterstützung für Typmerkmale.

Weitere Informationen über Klassen und Strukturen finden Sie unter

Windows-Runtime

Hinweise

Weitere Informationen finden Sie unter Verweisklassen und Strukturen und Wertklassen und Strukturen.

Parameter

base_type
(Optional) Ein Basistyp. Eine ref class oder ref struct kann von 0 (null) oder mehr Schnittstellen und 0 (null) oder einem ref-Typ erben. Eine value class oder value struct kann nur von 0 (null) oder mehr Schnittstellen erben.

Wenn Sie ein Objekt mithilfe der Schlüsselwörter ref class oder ref struct deklarieren, erfolgt der Zugriff auf das Objekt durch ein Handle für ein Objekt, d.h. einen Verweiszähler-Zeiger auf das Objekt. Wenn die deklarierte Variable den Gültigkeitsbereich verlässt, wird der Compiler automatisch das zugrunde liegende Objekt löschen. Wenn das Objekt als Parameter in einem Aufruf verwendet wird oder in einer Variablen gespeichert ist, wird ein Handle für das Objekt tatsächlich übergeben oder gespeichert.

Wenn Sie ein Objekt mithilfe der Schlüsselwörter value class oder value struct deklarieren, wird die Objektlebensdauer des deklarierten Objekts nicht überwacht. Das Objekt ist wie jede andere Standard-C++-Klasse oder -Struktur.

Anforderungen

Compileroption: /ZW

Übersicht: Common Language Runtime (CLR)

Hinweise

Die folgende Tabelle listet die für C++/CLI spezifischen Unterschiede zu der im Abschnitt Alle Laufzeiten gezeigten Syntax auf.

Parameter

base_type
(Optional) Ein Basistyp. Eine ref class oder ref struct kann von 0 (null) oder mehr verwalteten Schnittstellen und 0 (null) oder einem ref-Typ erben. Eine value class oder value struct kann nur von 0 (null) oder mehr verwalteten Schnittstellen erben.

Die Schlüsselwörter ref class und ref struct teilen dem Compiler mit, dass die Klasse oder Struktur dem Heap zugeteilt wird. Wenn das Objekt als Parameter in einem Aufruf verwendet wird oder in einer Variablen gespeichert ist, wird eine Referenz für das Objekt tatsächlich übergeben oder gespeichert.

Die Schlüsselwörter value class und value struct teilen dem Compiler mit, dass der Wert der zugeordneten Klasse oder Struktur an Funktionen übergeben oder in Membern gespeichert wird.

Anforderungen

Compileroption: /clr

Siehe auch

Komponentenerweiterungen für .NET und UWP