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 virtual
gekennzeichnet 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
Destruktoren und Finalizer in How to: Define and consume classes and structs (C++/CLI)
Vorgehensweise: Kapseln einer nativen Klasse zur Verwendung in C#
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