Freigeben über


Komponentenerweiterungen für Laufzeitplattformen

Visual C++ bietet Spracherweiterungen zur Unterstützung der Programmierung mit Laufzeitplattformen. Mit Komponentenerweiterungen für Visual C++ (C++/CX) können Sie Windows Store-Apps und -Komponenten programmieren, die in systemeigenen Code kompilieren. Obwohl Sie Windows Store-Apps erstellen können, indem Sie direkt für die Windows-Runtime-COM-Schnittstellen programmieren, können Sie mithilfe von C++/CX mit Konstruktoren, Ausnahmen und anderen Techniken moderner C++-Programmierung arbeiten. Um C++-Programmierung in einer verwalteten Ausführungsumgebung auf der .NET-Plattform zu aktivieren, können Sie C++/CLI verwenden.

Zwei Laufzeiten, ein Satz von Erweiterungen

C++/CX ist eine Teilmenge von C++/CLI. Für Erweiterungen, die von C++/CX und von C++/CLI unterstützt werden, hängt die Semantik davon ab, ob Sie die Common Language Runtime (CLR) oder die Windows-Runtime als Ziel verwenden. Um die App für die Ausführung auf der Windows-Runtime zu kompilieren, geben Sie die /ZW-Compileroption an. Um sie für die Ausführung auf der CLR zu kompilieren, geben Sie die /clr-Compileroption an. Diese Schalter werden automatisch festgelegt, wenn Sie Visual Studio zur Erstellung eines Projekt verwenden.

Weitere Informationen zum Erstellen von Windows Store-Apps in C++ finden Sie unter Roadmap for Windows Store apps using C++.

C++/CLI erweitert den C++-ISO/ANSI-Standard und wird unter dem C++/CLI-ECMA-Standard definiert. Weitere Informationen finden Sie unter .NET-Programmierung in Visual C++.

Datentyp-Schlüsselworte

Die Spracherweiterungen schließen Aggregatschlüsselwörter ein, bei denen es sich um Schlüsselwörter handelt, die aus zwei durch Leerraum getrennte Token bestehen. Die Token haben möglicherweise eine bestimmte Bedeutung, wenn sie einzeln verwendet werden, und eine andere Bedeutung, wenn sie zusammen verwendet werden. Beispielsweise ist das Wort "ref" ein normaler Bezeichner und das Wort "class" ein Schlüsselwort, das eine systemeigene Klasse deklariert. Wenn diese Wörter jedoch zu ref class kombiniert werden, deklariert das resultierende Aggregatschlüsselwort eine Entität, die als eine Laufzeitklasse bezeichnet wird.

Die Erweiterungen enthalten auch kontextbezogene Schlüsselwörter. Ein Schlüsselwort wird abhängig von der Art der Anweisung, in der es enthalten ist, und seiner Platzierung in dieser Anweisung als kontextbezogen behandelt. Beispielsweise kann das Token "property" ein Bezeichner sein oder es kann eine spezielle Art eines öffentlichen Klassenmembers deklarieren.

In der folgenden Tabelle sind Schlüsselwörter in der C++-Spracherweiterung aufgeführt.

Schlüsselwort

Kontextbezogen

Zweck

Verweis

ref class

ref struct

nein

Deklariert eine Klasse.

Klassen und Strukturen (Komponentenerweiterungen für C++)

value class

value struct

nein

Deklariert eine Wertklasse.

Klassen und Strukturen (Komponentenerweiterungen für C++)

interface class

interface struct

nein

Deklariert eine Schnittstelle.

interface class (Komponentenerweiterungen für C++)

enum class

enum struct

nein

Deklariert eine Enumeration.

enum class (Komponentenerweiterungen für C++)

property

ja

Deklariert eine Eigenschaft.

property (Komponentenerweiterungen für C++)

delegate

ja

Deklariert einen Delegaten.

delegate (Komponentenerweiterungen für C++)

event

ja

Deklariert ein Ereignis.

event (Komponentenerweiterungen für C++)

Überschreibungsspezifizierer

Sie können die folgenden Schlüsselwörter verwenden, um das Überschreibungsverhalten für Ableitung zu qualifizieren. Obwohl das new-Schlüsselwort keine Erweiterung von C++ ist, wird es hier aufgeführt, da es in einem zusätzlichen Kontext verwendet werden kann. Einige Bezeichner sind auch für die systemeigene Programmierung gültig. Weitere Informationen finden Sie unter Gewusst wie: Deklarieren Sie Überschreibungs-Spezifizierer in systemeigenen Kompilierungen.

Schlüsselwort

Kontextbezogen

Zweck

Verweis

abstract

ja

Gibt an, dass Funktionen oder Klassen abstrakt sind.

abstract (Komponentenerweiterungen für C++)

new

nein

Gibt an, dass eine Funktion keine Überschreibung einer Basisklassenversion ist.

new (neuer Slot in vtable) (Komponentenerweiterungen für C++)

override

ja

Gibt an, dass eine Methode eine Überschreibung einer Basisklassenversion sein muss.

override (Komponentenerweiterungen für C++)

sealed

ja

Verhindert, dass Klassen als Basisklassen verwendet werden.

sealed (Komponentenerweiterungen für C++)

Schlüsselwörter für Generika

Die folgenden Schlüsselwörter wurden hinzugefügt, um generische Typen zu unterstützen. Weitere Informationen finden Sie unter Generika (Komponentenerweiterungen für C++).

Schlüsselwort

Kontextbezogen

Zweck

generic

nein

Definiert einen generischen Typ.

where

ja

Gibt die Einschränkungen an, die für einen generischen Typparameter angewendet werden.

Sonstige Schlüsselwörter

Die folgenden Schlüsselwörter wurden den C++-Erweiterungen hinzugefügt.

Schlüsselwort

Kontextbezogen

Zweck

Verweis

finally

ja

Gibt das Standardausnahmebehandlungsverhalten an.

Ausnahmebehandlung (Komponentenerweiterungen für C++)

for each, in

nein

Listet die Elemente einer Auflistung auf.

For Each in

gcnew

nein

Ordnet Typen auf dem Heap der Garbage Collection zu. Wird anstelle von new und delete verwendet.

ref new, gcnew (Komponentenerweiterungen für C++)

ref new

ja

Ordnet einen Windows-Runtime-Typ zu. Wird anstelle von new und delete verwendet.

ref new, gcnew (Komponentenerweiterungen für C++)

initonly

ja

Gibt an, dass ein Member nur in der Deklaration oder in einem statischen Konstruktor initialisiert werden kann.

initonly

literal

ja

Erstellt eine literale Variable.

literal (Komponentenerweiterungen für C++)

nullptr

nein

Gibt an, dass ein Handle oder ein Zeiger nicht auf ein Objekt zeigt.

nullptr (Komponentenerweiterungen für C++)

Vorlagenkonstrukte

Die folgenden Sprachkonstrukte werden nicht als Schlüsselwörter, sondern als Vorlagen implementiert. Wenn Sie die /ZW-Compileroption angeben, werden sie im lang-Namespace definiert. Wenn Sie die /clr-Compileroption angeben, werden sie im cli-Namespace definiert.

Schlüsselwort

Zweck

Verweis

array

Deklariert einen Array.

Arrays (Komponentenerweiterungen für C++)

interior_ptr

(Nur CLR:) Zeigt auf Daten in einem Referenztyp.

interior_ptr (C++/CLI)

pin_ptr

(Nur CLR:) Zeigt auf CLR-Referenztypen, um das Garbage Collection-System vorübergehend zu unterdrücken.

pin_ptr (C++/CLI)

safe_cast

Bestimmt die optimale Umwandlungsmethode für einen Laufzeittyp und führt diese aus.

safe_cast (Komponentenerweiterungen für C++)

typeid

(Nur CLR:) Ruft ein Type-Objekt ab, das den angegebenen Typ oder das angegebene Objekt beschreibt.

typeid (Komponentenerweiterungen für C++)

Deklaratoren

Die folgenden Typdeklaratoren weisen die Laufzeit an, die Lebensdauer und das Löschen von zugeordneten Objekten automatisch zu verwalten.

Operator

Zweck

Verweis

^

Deklariert ein Handle zu einem Objekt, d. h. einen Zeiger auf ein Windows-Runtime- oder CLR-Objekt, der automatisch gelöscht wird, wenn er nicht mehr verwendet werden kann.

Handle für Objekt (^) (Komponentenerweiterungen für C++)

%

Deklariert einen Nachverfolgungsverweis, d. h., einen Verweis auf ein Windows-Runtime- oder CLR-Objekt, der automatisch gelöscht wird, wenn er nicht mehr verwendet werden kann.

Nachverfolgungsverweisoperator (Komponentenerweiterungen für C++)

Zusätzliche Konstrukte und verwandte Themen

In diesem Abschnitt werden weitere Programmierungskonstrukte sowie Themen aufgeführt, die die CLR betreffen.

Thema

Beschreibung

__identifier (C++/CLI)

(Windows-Runtime und CLR:) Ermöglicht die Verwendung von Schlüsselwörtern als Bezeichner.

Variable Argumentlisten (...) (C++/CLI)

(Windows-Runtime und CLR:) Ermöglicht es einer Funktion, eine variable Anzahl von Argumenten zu akzeptieren.

.NET Framework-Entsprechungen der systemeigenen Typen in C++ (C++/CLI)

Listet die CLR-Typen auf, die anstelle von ganzzahligen C++-Typen verwendet werden.

Modifizierer appdomain__declspec

__declspec-Modifizierer, für den es erforderlich ist, dass anwendungsdomänenspezifische statische und globale Variablen vorhanden sind.

C-stilartige Umwandlungen mit /clr (C++/CLI)

Beschreibt, wie Umwandlungen im C-Stil interpretiert werden.

__clrcall-Aufrufkonvention

Gibt die CLR-kompatible Aufrufkonvention an.

__cplusplus_cli

Vordefinierte Makros

Benutzerdefinierte Attribute (C++)

Beschreibt, wie eigene CLR-Attribute definiert werden.

Ausnahmebehandlung (Komponentenerweiterungen für C++)

Stellt eine Übersicht über die Ausnahmebehandlung bereit.

Explizite Überschreibungen (Komponentenerweiterungen für C++)

Zeigt, wie Memberfunktionen beliebige Member überschreiben können.

Friend-Assemblys (C++)

Erläutert, wie eine Clientassembly auf alle Typen in einer Assemblykomponente zugreifen kann.

Boxing (Komponentenerweiterungen für C++)

Veranschaulicht die Bedingungen, unter denen Werttypen geschachtelt werden.

Compilerunterstützung für Typmerkmale (Komponentenerweiterungen für C++)

Erläutert, wie Eigenschaften von Typen zur Kompilierzeit erkannt werden.

managed, unmanaged-Pragmas

Veranschaulicht, wie verwaltete und nicht verwaltete Funktionen in demselben Modul zusammen verwendet werden können.

Modifizierer Prozess__declspec

__declspec-Modifizierer, für den es erforderlich ist, dass prozessspezifische statische und globale Variablen vorhanden sind.

Reflektion (C++/CLI)

Zeigt die CLR-Version von Informationen zum Laufzeittyp.

Zeichenfolge (Komponentenerweiterungen für C++)

Erläutert die Compilerkonvertierung von Zeichenfolgenliteralen zu String.

Typweiterleitung (C++/CLI)

Ermöglicht das Verschieben eines Typs aus einer bereits bereitgestellten Assembly in eine andere Assembly, sodass Clientcode nicht neu kompiliert werden muss.

Benutzerdefinierte Attribute (Komponentenerweiterungen für C++)

Veranschaulicht benutzerdefinierte Attribute.

#using-Direktive (C++)

Importiert externe Assemblys.

XML-Dokumentation (Visual C++)

Erläutert die XML-basierte Codedokumentation mithilfe von /doc (Verarbeiten von Dokumentationskommentaren) (C/C++)

Siehe auch

Weitere Ressourcen

.NET-Programmierung in Visual C++

Interoperabilität von systemeigenem Code und .NET