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 Cel 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 Cel 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 Cel
Ogólny 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 Cel 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 Cel Odwołanie
Tablicy 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 Cel 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

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