Komponentenerweiterungen für .NET und UWP

Der C++-Standard ermöglicht es Compileranbietern, nicht standardmäßige Erweiterungen für die Sprache bereitzustellen. Microsoft stellt Erweiterungen bereit, um Sie dabei zu unterstützen, nativen C++-Code mit Code zu verknüpfen, der im .NET Framework oder auf der universellen Windows-Plattform (UWP) ausgeführt wird. Die .NET-Erweiterungen heißen C++/CLI und erzeugen Code, der in der Common Language Runtime – der von .NET verwalteten Ausführungsumgebung – ausgeführt werden kann. Die UWP-Erweiterungen heißen C++/CX und erzeugen nativen Maschinencode.

Hinweis

Für neue Anwendungen empfehlen wir die Verwendung von C++/WinRT anstelle von C++/CX. C++/WinRT ist eine neue, standardmäßige C++17-Sprachprojektion für Windows-Runtime-APIs. Wir unterstützen C++/CX und WRL weiterhin, empfehlen jedoch dringend die Verwendung von C++/WinRT für neue Anwendungen. Weitere Informationen finden Sie unter C++/WinRT.

Zwei Laufzeiten, ein Satz von Erweiterungen

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

Die C++/CX-Erweiterungen sind eine Teilmenge von C++/CLI. Die Erweiterungssyntax ist zwar in den meisten Fällen gleich, welcher Code generiert wird, richtet sich aber danach, ob Sie die Compileroption /ZW für UWP oder die Option /clr für .NET angeben. Diese Schalter werden automatisch festgelegt, wenn Sie Visual Studio zur Erstellung eines Projekt verwenden.

Datentyp-Schlüsselworte

Die Spracherweiterungen schließen Aggregatschlüsselwörter ein, 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 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.

Stichwort Kontextbezogen Zweck Verweis
ref class

ref struct
No Deklariert eine Klasse. Klassen und Strukturen
value class

value struct
No Deklariert eine Wertklasse. Klassen und Strukturen
Schnittstellenklasse

interface struct
No Deklariert eine Schnittstelle. Schnittstellenklasse
enum class

enum struct
No Deklariert eine Enumeration. enum class
property Yes Deklariert eine Eigenschaft. property
delegate Yes Deklariert einen Delegaten. Delegat (C++/CLI und C++/CX)
event Yes Deklariert ein Ereignis. event

Ü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 Vorgehensweise: Deklarieren von Außerkraftsetzungsspezifizierern in nativen Kompilierungen (C++/CLI).

Stichwort Kontextbezogen Zweck Verweis
abstract Yes Gibt an, dass Funktionen oder Klassen abstrakt sind. abstract
new No Gibt an, dass eine Funktion keine Überschreibung einer Basisklassenversion ist. new (neuer Slot in vtable)
override Yes Gibt an, dass eine Methode eine Überschreibung einer Basisklassenversion sein muss. override
sealed Yes Verhindert, dass Klassen als Basisklassen verwendet werden. sealed

Schlüsselwörter für Generics

Die folgenden Schlüsselwörter wurden hinzugefügt, um generische Typen zu unterstützen. Weitere Informationen finden Sie unter Generics.

Stichwort Kontextbezogen Zweck
Generische No Definiert einen generischen Typ.
where Yes 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.

Stichwort Kontextbezogen Zweck Verweis
finally Yes Gibt das Standardausnahmebehandlungsverhalten an. Behandlung von Ausnahmen
for each, in No Listet die Elemente einer Auflistung auf. for each, in
gcnew No Ordnet Typen auf dem Heap der Garbage Collection zu. Verwenden Sie anstelle von new und delete . ref new, gcnew
ref new Yes Weist einen Windows-Runtime-Typ zu. Verwenden Sie anstelle von new und delete . ref new, gcnew
initonly Yes Gibt an, dass ein Member nur in der Deklaration oder in einem statischen Konstruktor initialisiert werden kann. initonly (C++/CLI)
literal Yes Erstellt eine literale Variable. literal
nullptr No Gibt an, dass ein Handle oder ein Zeiger nicht auf ein Objekt zeigt. nullptr

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.

Stichwort Zweck Verweis
array Deklariert einen Array. Arrays
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
typeid (Nur CLR:) Ruft ein System.Type-Objekt ab, das den angegebenen Typ oder das angegebene Objekt beschreibt. Typeid

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 Objektoperator (^)
% 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

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 zu nativen C++-Typen (C++/CLI) Listet die CLR-Typen auf, die anstelle von ganzzahligen C++-Typen verwendet werden.
appdomain __declspec Modifizierer __declspec -Modifizierer, der vorsingt, dass statische und globale Variablen pro Anwendungsdomäne 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 Beschreibt, wie eigene CLR-Attribute definiert werden.
Behandlung von Ausnahmen Stellt eine Übersicht über die Ausnahmebehandlung bereit.
Explizite Überschreibungen 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 Veranschaulicht die Bedingungen, unter denen Werttypen geschachtelt werden.
Compilerunterstützung für Typmerkmale Erläutert, wie Eigenschaften von Typen zur Kompilierzeit erkannt werden.
verwaltete, nicht verwaltete Pragmas Veranschaulicht, wie verwaltete und nicht verwaltete Funktionen in demselben Modul zusammen verwendet werden können.
process __declspec Modifizierer __declspec -Modifizierer, der vorsingt, dass statische und globale Variablen pro Prozess vorhanden sind.
Reflexion (C++/CLI) Zeigt die CLR-Version von Informationen zum Laufzeittyp.
String 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 Veranschaulicht benutzerdefinierte Attribute.
#using-Direktive Importiert externe Assemblys.
XML-Dokumentation Erläutert die XML-basierte Codedokumentation mit /doc (Verarbeiten von Dokumentationskommentaren) (C/C++).

Siehe auch

.NET-Programmierung mit C++/CLI (Visual C++)
Native und .NET-Interoperabilität