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.
Schlüsselwort | 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 |
Enumerationsklasse enum struct |
No | 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 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 Überschreibungsspezifizierer in nativen Kompilierungen (C++/CLI).
Schlüsselwort | Kontextbezogen | Zweck | Verweis |
---|---|---|---|
abstract | Ja | 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 | 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.
Schlüsselwort | Kontextbezogen | Zweck |
---|---|---|
generic | No | 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 |
for each in | No | Listet die Elemente einer Auflistung auf. | for each in |
gcnew | No | Ordnet Typen auf dem Heap der Garbage Collection zu. Wird anstelle von new und delete verwendet. |
ref new, gcnew |
ref new | Ja | Weist einen Windows-Runtime-Typ zu. Wird anstelle von new und delete verwendet. |
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 |
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.
Schlüsselwort | 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 |
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 nativen Typen in C++ (C++/CLI) | Listet die CLR-Typen auf, die anstelle von ganzzahligen C++-Typen verwendet werden. |
appdomain __declspec -Modifizierer |
__declspec -Modifizierer, für den es erforderlich ist, dass anwendungsdomänenspezifische statische und globale Variablen vorhanden sind. |
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. |
process __declspec -Modifizierer |
__declspec -Modifizierer, für den es erforderlich ist, dass prozessspezifische statische und globale Variablen vorhanden sind. |
Reflexion (C++/CLI) | Zeigt die CLR-Version von Informationen zum Laufzeittyp. |
Zeichenfolge | 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++). |
Weitere Informationen
.NET Programming with C++/CLI (Visual C++) (.NET-Programmierung mit C++/CLI (Visual C++))
Interoperabilität von nativem Code und .NET