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
Nein Deklariert eine Klasse. Klassen und Strukturen
value class

value struct
Nein Deklariert eine Wertklasse. Klassen und Strukturen
Schnittstellenklasse

interface struct
Nein Deklariert eine Schnittstelle. Schnittstellenklasse
Enumerationsklasse

enum struct
Nein Deklariert eine Enumeration. Enumerationsklasse
property Ja Deklariert eine Eigenschaft. property
delegate Ja Deklariert einen Delegaten. Delegat (C++/CLI und C++/CX)
event Ja Deklariert ein Ereignis. event

Überschreibungsspezifizierer

Sie können die folgenden Schlüsselwörter verwenden, um das Überschreibungsverhalten für Ableitung zu qualifizieren. Obwohl die new Schlüsselwort (keyword) keine Erweiterung von C++ ist, wird sie hier aufgeführt, da sie in einem zusätzlichen Kontext verwendet werden kann. Einige Bezeichner sind auch für die systemeigene Programmierung gültig. Weitere Informationen finden Sie unter How to: Declare Override Specifiers in Native Compilations (C++/CLI).

Stichwort Kontextbezogen Zweck Verweis
abstract Ja Gibt an, dass Funktionen oder Klassen abstrakt sind. abstract
new Nein Gibt an, dass eine Funktion keine Überschreibung einer Basisklassenversion ist. new (neuer Slot in vtable)
override Ja Gibt an, dass eine Methode eine Überschreibung einer Basisklassenversion sein muss. override
sealed Ja 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
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.

Stichwort Kontextbezogen Zweck Verweis
finally Ja Gibt das Standardausnahmebehandlungsverhalten an. Ausnahmebehandlung
for each in Nein Listet die Elemente einer Auflistung auf. for each in
gcnew Nein Ordnet Typen auf dem Heap der Garbage Collection zu. Verwenden Sie anstelle und newdelete. ref new, gcnew
ref new Ja Weist einen Windows-Runtime-Typ zu. Verwenden Sie anstelle und newdelete. ref new, gcnew
initonly Ja Gibt an, dass ein Member nur in der Deklaration oder in einem statischen Konstruktor initialisiert werden kann. initonly (C++/CLI)
literal Ja Erstellt eine literale Variable. literal
nullptr Nein 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 Objekt (^)
% 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 der nativen Typen in C++ (C++/CLI) Listet die CLR-Typen auf, die anstelle von ganzzahligen C++-Typen verwendet werden.
appdo Standard__declspec Modifizierer __declspecModifizierer, der angibt, dass statische und globale Variablen pro appdo vorhanden sind Standard.
Umwandlungen im C-Stil mit /clr (C++/CLI) Beschreibt, wie Umwandlungen im C-Stil interpretiert werden.
__clrcall-Aufrufkonvention Gibt die CLR-konforme Aufrufkonvention an.
__cplusplus_cli Vordefinierte Makros
Benutzerdefinierte Attribute Beschreibt, wie eigene CLR-Attribute definiert werden.
Ausnahmebehandlung 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 Pragmata Veranschaulicht, wie verwaltete und nicht verwaltete Funktionen in demselben Modul zusammen verwendet werden können.
Prozessmodifizierer__declspec __declspec Modifizierer, der angibt, 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 Programming with C++/CLI (Visual C++) (.NET-Programmierung mit C++/CLI (Visual C++))
Interoperabilität von nativem Code und .NET