Rozszerzenia składników dla platformy .NET i platformy uniwersalnej systemu Windows
Standard C++ umożliwia dostawcom kompilatora udostępnianie niestandardowych rozszerzeń języka. Firma Microsoft udostępnia rozszerzenia ułatwiające łączenie natywnego kodu C++ z kodem uruchamianym na platformie .NET Framework lub platforma uniwersalna systemu Windows (UWP). Rozszerzenia platformy .NET są nazywane językiem C++/CLI i tworzą kod wykonywany w zarządzanym środowisku wykonywania platformy .NET nazywanym środowiskiem uruchomieniowym języka wspólnego (CLR). Rozszerzenia platformy UNIWERSALNEJ systemu Windows są nazywane językiem C++/CX i tworzą natywny kod maszyny.
Uwaga
W przypadku nowych aplikacji zalecamy używanie języka C++/WinRT, a nie C++/CX. C++/WinRT to nowa, standardowa projekcja języka C++17 dla interfejsów API środowisko wykonawcze systemu Windows. Będziemy nadal obsługiwać języki C++/CX i WRL, ale zdecydowanie zalecamy, aby nowe aplikacje używały języka C++/WinRT. Aby uzyskać więcej informacji, zobacz C++/WinRT.
Dwa środowiska uruchomieniowe— jeden zestaw rozszerzeń
Język C++/CLI rozszerza standard ISO/ANSI C++ i jest definiowany w standardzie Ecma C++/CLI. Aby uzyskać więcej informacji, zobacz Programowanie .NET za pomocą języka C++/CLI (Visual C++).
Rozszerzenia C++/CX są podzbiorem języka C++/CLI. Chociaż składnia rozszerzenia jest identyczna w większości przypadków, generowany kod zależy od tego, czy określono opcję kompilatora /ZW
docelową platformę UWP, czy /clr
opcję docelową platformy .NET. Te przełączniki są ustawiane automatycznie podczas tworzenia projektu przy użyciu programu Visual Studio.
Słowa kluczowe typu danych
Rozszerzenia języka zawierają agregowane słowa kluczowe, które składają się z dwóch tokenów oddzielonych białym znakiem. Tokeny mogą mieć jedno znaczenie, gdy są używane oddzielnie, a inne znaczenie, gdy są używane razem. Na przykład słowo "ref" jest zwykłym identyfikatorem, a słowo "class" to słowo kluczowe, które deklaruje klasę natywną. Jednak gdy te wyrazy są łączone w celu utworzenia klasy ref, wynikowe słowo kluczowe agregacji deklaruje jednostkę, która jest znana jako klasa środowiska uruchomieniowego.
Rozszerzenia zawierają również kontekstowe słowa kluczowe. Słowo kluczowe jest traktowane jako kontekstowe w zależności od rodzaju instrukcji zawierającej ją i jego umieszczania w tej instrukcji. Na przykład token "właściwość" może być identyfikatorem lub może zadeklarować specjalny rodzaj składowej klasy publicznej.
W poniższej tabeli wymieniono słowa kluczowe w rozszerzeniu języka C++.
Słowo kluczowe | Kontekstowa | Purpose | Odwołanie |
---|---|---|---|
ref, klasa ref, struktura |
Nie. | Deklaruje klasę. | Klasy i struktury |
value, klasa value, struktura |
Nie. | Deklaruje klasę wartości. | Klasy i struktury |
interface class interface, struktura |
Nie. | Deklaruje interfejs. | interface class |
enum class enum, struktura |
Nie. | Deklaruje wyliczenie. | enum class |
property |
Tak | Deklaruje właściwość. | właściwość |
delegate | Tak | Deklaruje delegata. | delegat (C++/CLI i C++/CX) |
event | Tak | Deklaruje zdarzenie. | event |
Specyfikatory zastąpienia
Następujące słowa kluczowe służą do kwalifikowania zachowania zastępowania dla wyprowadzania. new
Chociaż słowo kluczowe nie jest rozszerzeniem języka C++, jest ono wymienione tutaj, ponieważ może być używane w dodatkowym kontekście. Niektóre specyfikatory są również prawidłowe dla programowania natywnego. Aby uzyskać więcej informacji, zobacz Instrukcje: deklarowanie specyfikatorów przesłonięcia w kompilacjach natywnych (C++/CLI).
Słowo kluczowe | Kontekstowa | Purpose | Odwołanie |
---|---|---|---|
abstract | Tak | Wskazuje, że funkcje lub klasy są abstrakcyjne. | abstract |
new |
Nie. | Wskazuje, że funkcja nie jest przesłonięcią wersji klasy bazowej. | new (nowe gniazdo w vtable) |
override | Tak | Wskazuje, że metoda musi być przesłonięcią wersję klasy bazowej. | override |
sealed | Tak | Uniemożliwia korzystanie z klas jako klas bazowych. | sealed |
Słowa kluczowe dla typów ogólnych
Następujące słowa kluczowe zostały dodane do obsługi typów ogólnych. Aby uzyskać więcej informacji, zobacz Ogólne.
Słowo kluczowe | Kontekstowa | Purpose |
---|---|---|
rodzajowy | Nie. | Deklaruje typ ogólny. |
gdzie | Tak | Określa ograniczenia, które są stosowane do parametru typu ogólnego. |
Różne słowa kluczowe
Następujące słowa kluczowe zostały dodane do rozszerzeń języka C++.
Słowo kluczowe | Kontekstowa | Purpose | Odwołanie |
---|---|---|---|
finally | Tak | Wskazuje domyślne zachowanie obsługi wyjątków. | Obsługa wyjątków |
for each, in | Nie. | Wylicza elementy kolekcji. | for each, in |
gcnew | Nie. | Przydziela typy na stercie zbieranym przez śmieci. Użyj zamiast new i delete . |
ref new, gcnew |
ref new | Tak | Przydziela typ środowisko wykonawcze systemu Windows. Użyj zamiast new i delete . |
ref new, gcnew |
initonly | Tak | Wskazuje, że element członkowski może być inicjowany tylko w deklaracji lub w konstruktorze statycznym. | initonly (C++/CLI) |
literal | Tak | Tworzy zmienną literału. | literal |
nullptr |
Nie. | Wskazuje, że uchwyt lub wskaźnik nie wskazuje obiektu. | nullptr |
Konstrukcje szablonów
Następujące konstrukcje językowe są implementowane jako szablony, a nie jako słowa kluczowe. Jeśli określisz opcję kompilatora /ZW
, są one zdefiniowane w lang
przestrzeni nazw. Jeśli określisz opcję kompilatora /clr
, są one zdefiniowane w cli
przestrzeni nazw.
Słowo kluczowe | Purpose | Odwołanie |
---|---|---|
tablica | Deklaruje tablicę. | Tablice |
interior_ptr | (tylko CLR) Wskazuje dane w typie odwołania. | interior_ptr (C++/CLI) |
pin_ptr | (tylko CLR) Wskazuje typy odwołań CLR w celu tymczasowego pomijania systemu odzyskiwania pamięci. | pin_ptr (C++/CLI) |
safe_cast | Określa i wykonuje optymalną metodę rzutowania dla typu środowiska uruchomieniowego. | safe_cast |
typeid |
(tylko CLR) System.Type Pobiera obiekt opisujący dany typ lub obiekt. | typeid |
Deklaratory
Deklaratory następującego typu instruują środowisko uruchomieniowe, aby automatycznie zarządzało okresem istnienia i usuwaniem przydzielonych obiektów.
Operator | Purpose | Odwołanie |
---|---|---|
^ |
Deklaruje uchwyt do obiektu; oznacza to, że wskaźnik do obiektu środowisko wykonawcze systemu Windows lub CLR, który jest automatycznie usuwany, gdy nie jest już używany. | Operator uchwytu do obiektu (^) |
% |
Deklaruje odwołanie do śledzenia; oznacza to odwołanie do obiektu środowisko wykonawcze systemu Windows lub CLR, który jest automatycznie usuwany, gdy nie jest już używany. | Operator odwołania śledzenia |
Dodatkowe konstrukcje i tematy pokrewne
W tej sekcji wymieniono dodatkowe konstrukcje programowania i tematy dotyczące środowiska CLR.
Temat | opis |
---|---|
__identifier (C++/CLI) | (środowisko wykonawcze systemu Windows i CLR) Umożliwia użycie słów kluczowych jako identyfikatorów. |
Listy zmiennych argumentów (...) (C++/CLI) | (środowisko wykonawcze systemu Windows i CLR) Umożliwia funkcji przejmowanie zmiennej liczby argumentów. |
Odpowiedniki typów natywnych języka C++ w programie .NET Framework (C++/CLI) | Wyświetla listę typów CLR, które są używane zamiast typów całkowitych języka C++. |
modyfikator appdomain __declspec |
__declspec modyfikator, który nakazuje istnienie zmiennych statycznych i globalnych na domenę aplikacji. |
Rzutowania w stylu C z /clr (C++/CLI) | Opisuje sposób interpretowania rzutów w stylu C. |
__clrcall konwencji wywoływania | Wskazuje konwencję wywoływania zgodną ze specyfikacją CLR. |
__cplusplus_cli |
Wstępnie zdefiniowane makra |
Atrybuty niestandardowe | Opisuje sposób definiowania własnych atrybutów CLR. |
Obsługa wyjątków | Zawiera omówienie obsługi wyjątków. |
Jawne przesłonięcia | Pokazuje, jak funkcje składowe mogą zastępować dowolne elementy członkowskie. |
Przyjazne zestawy (C++) | Omówienie sposobu, w jaki zestaw klienta może uzyskać dostęp do wszystkich typów w składniku zestawu. |
Konwersja boxing | Demonstruje warunki, w których typy wartości są pola. |
Obsługa cech typu w kompilatorze | Omówienie sposobu wykrywania cech typów w czasie kompilacji. |
zarządzane, niezarządzane pragmas | Pokazuje, jak funkcje zarządzane i niezarządzane mogą współistnieć w tym samym module. |
modyfikator procesu __declspec |
__declspec modyfikator, który nakazuje istnienie zmiennych statycznych i globalnych na proces. |
Odbicie (C++/CLI) | Demonstruje wersję środowiska CLR informacji o typie czasu wykonywania. |
ciąg | Omówiono konwersję literałów ciągu kompilatora na String. |
Przekazywanie dalej typu (C++/CLI) | Umożliwia przenoszenie typu w zestawie wysyłkowym do innego zestawu, dzięki czemu kod klienta nie musi być ponownie skompilowany. |
Atrybuty zdefiniowane przez użytkownika | Demonstruje atrybuty zdefiniowane przez użytkownika. |
#using, dyrektywa | Importuje zestawy zewnętrzne. |
Dokumentacja XML | Objaśnia dokumentację kodu opartą na kodzie XML przy użyciu / doc (Przetwarzanie komentarzy dokumentacji) (C/C++) |
Zobacz też
Programowanie .NET w języku C++/interfejsie wiersza polecenia (Visual C++)
Współdziałanie natywne i .NET