Rozszerzenia składników dla platformy .NET i platformy uniwersalnej systemu Windows

Standard C++ umożliwia dostawcom kompilatora udostępnianie niestandardowych rozszerzeń w języku. Firma Microsoft udostępnia rozszerzenia ułatwiające łączenie natywnego kodu C++ z kodem, który jest uruchamiany na .NET Framework lub platforma uniwersalna systemu Windows (platformy UWP). Rozszerzenia platformy .NET są nazywane C++/CLI i tworzą kod, który jest wykonywany w środowisku wykonawczym środowiska uruchomieniowego platformy .NET, który jest nazywany CLR. Rozszerzenia platformy UWP są nazywane C++/CX i tworzą natywny kod maszynowy.

Uwaga

W przypadku nowych aplikacji zalecamy użycie języka C++/WinRT zamiast języka C++/CX. C++/WinRT to nowy, standardowy język C++ 17 przeznaczony do środowisko wykonawcze systemu Windows interfejsów API. Będziemy nadal obsługiwać C++/CX i WRL, ale zdecydowanie zaleca się, aby nowe aplikacje korzystały z języka C++/WinRT. Aby uzyskać więcej informacji, zobacz C++/WinRT.

Dwa środowiska uruchomieniowe, jeden zestaw rozszerzeń

C++/CLI rozszerza standard ISO/ANSI C++ i jest zdefiniowany w standardzie ECMA C++/CLI. Aby uzyskać więcej informacji, zobacz programowanie .NET przy użyciu 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 /ZW opcję kompilatora docelową platformy UWP, czy też /clr opcję docelową platformy .NET. Te przełączniki są ustawiane automatycznie w przypadku tworzenia projektu przy użyciu programu Visual Studio.

Słowa kluczowe typu danych

Rozszerzenia języka obejmują zagregowane słowa kluczowe, które składają się z dwóch tokenów oddzielonych znakami odstępu. Tokeny mogą mieć jedno znaczenie, gdy są używane oddzielnie, i inne znaczenie, gdy są używane razem. Na przykład słowo "ref" jest zwykłym identyfikatorem, a słowo "Class" jest słowem kluczowym, które deklaruje klasę natywną. Ale jeśli te wyrazy są połączone z klasą ref, to uzyskane słowo kluczowe Aggregate 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 jej umieszczenia w tej instrukcji. Na przykład token "Property" może być identyfikatorem lub może deklarować specjalny rodzaj składowej klasy publicznej.

Poniższa tabela zawiera listę słów kluczowych w rozszerzeniu języka C++.

Słowo kluczowe Kontekstowe Przeznaczenie Dokumentacja
ref — Klasa

ref — struktura
Nie Deklaruje klasę. Klasy i struktury
Klasa wartości

Struktura wartości
Nie Deklaruje klasę wartości. Klasy i struktury
interface, klasa

Struktura interfejsu
Nie Deklaruje interfejs. interface, klasa
enum, klasa

Wyliczenie — struktura
Nie Deklaruje Wyliczenie. enum, klasa
property Tak Deklaruje właściwość. wartość
Wierz Tak Deklaruje delegata. delegat (C++/CLI i C++/CX)
wydarzen Tak Deklaruje zdarzenie. wydarzen

Specyfikatory zastąpienia

Możesz użyć następujących słów kluczowych, aby zakwalifikować zachowanie przesłaniania dla celów pochodnych. Chociaż new słowo kluczowe nie jest rozszerzeniem języka C++, jest wyświetlane w tym miejscu, 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 jak: deklarowanie specyfikatorów przesłonięć w kompilacjach natywnych (C++/CLI).

Słowo kluczowe Kontekstowe Przeznaczenie Dokumentacja
streszczeń Tak Wskazuje, że funkcje lub klasy są abstrakcyjne. streszczeń
new Nie Wskazuje, że funkcja nie jest przesłonięciem wersji klasy bazowej. new (nowe gniazdo w vtable)
override Tak Wskazuje, że metoda musi być przesłonięciem wersji klasy bazowej. override
sealed Tak Zapobiega używaniu klas jako klas bazowych. sealed

Słowa kluczowe dla typów ogólnych

Dodano następujące słowa kluczowe do obsługi typów ogólnych. Aby uzyskać więcej informacji, zobacz Ogólne.

Słowo kluczowe Kontekstowe Przeznaczenie
ogólnego Nie Deklaruje typ ogólny.
miejscu Tak Określa ograniczenia, które są stosowane do parametru typu ogólnego.

Różne słowa kluczowe

Do rozszerzeń języka C++ dodano następujące słowa kluczowe.

Słowo kluczowe Kontekstowe Przeznaczenie Dokumentacja
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 stosie zebranych elementów bezużytecznych. Użyj zamiast new i delete . ref new, gcnew
nowe odwołania Tak Przypisuje typ środowisko wykonawcze systemu Windows. Użyj zamiast new i delete . ref new, gcnew
initonly Tak Wskazuje, że element członkowski może być zainicjowany tylko w deklaracji lub w konstruktorze statycznym. initonly (C++/CLI)
wpisać Tak Tworzy zmienną literału. wpisać
nullptr Nie Oznacza, że uchwyt lub wskaźnik nie wskazuje na obiekt. nullptr

Konstrukcje szablonu

Poniższe konstrukcje języka są implementowane jako szablony, a nie słowa kluczowe. Jeśli określisz /ZW opcję kompilatora, są one zdefiniowane w lang przestrzeni nazw. Jeśli określisz /clr opcję kompilatora, są one zdefiniowane w cli przestrzeni nazw.

Słowo kluczowe Przeznaczenie Dokumentacja
array Deklaruje tablicę. Tablice
interior_ptr (Tylko CLR) Wskazuje dane w typie referencyjnym. interior_ptr (C++/CLI)
pin_ptr (Tylko CLR) Wskazuje typy odwołań CLR do tymczasowego pomijania systemu odzyskiwania pamięci. pin_ptr (C++/CLI)
safe_cast Określa i wykonuje metodę optymalnego rzutowania dla typu środowiska uruchomieniowego. safe_cast
typeid (Tylko CLR) Pobiera System.Type obiekt, który opisuje dany typ lub obiekt. typeid

Deklaratory

Następujący typ Deklaratory powoduje, że środowisko uruchomieniowe automatycznie zarządza okresem istnienia i usuwaniem przyznanych obiektów.

Operator Przeznaczenie Dokumentacja
^ Deklaruje dojście do obiektu; oznacza to, że wskaźnik do środowisko wykonawcze systemu Windows lub obiektu CLR, który jest automatycznie usuwany, gdy nie będzie już można go używać. Operator uchwytu do obiektu (^)
% Deklaruje odwołanie śledzenia; oznacza to odwołanie do środowisko wykonawcze systemu Windows lub obiektu CLR, który jest automatycznie usuwany, gdy nie będzie już można go używać. Operator odwołania śledzenia

Ta sekcja zawiera listę dodatkowych konstrukcji programistycznych i tematów odnoszących się do środowiska CLR.

Temat Opis
__identifier (C++/CLI) (Środowisko wykonawcze systemu Windows i CLR) Umożliwia używanie słów kluczowych jako identyfikatorów.
Listy zmiennych argumentów (...) (C++/CLI) (Środowisko wykonawcze systemu Windows i CLR) Włącza funkcję, aby przyjmować zmienną liczbę 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++.
domena aplikacji __declspec modyfikator __declspec modyfikator, który jest upoważniony do istnienia zmiennych statycznych i globalnych na domenę aplikacji.
Rzutowania w stylu C i kompilator /clr (C++/CLI) Opisuje, jak są interpretowane rzutowania w stylu języka C.
__clrcall konwencji wywoływania Wskazuje konwencję wywoływania zgodną ze środowiskiem 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 zastąpienia Pokazuje, jak funkcje Członkowskie mogą przesłaniać dowolnych członków.
Zaprzyjaźnione zestawy (C++) W tym artykule omówiono sposób, w jaki zestaw klienta może uzyskać dostęp do wszystkich typów w składniku zestawu.
Boxing Pokazuje warunki, w których typy wartości są opakowane.
Obsługa kompilatora dla cech typu Omawia sposób wykrywania właściwości typów w czasie kompilacji.
zarządzane, niezarządzane dyrektywy pragma Pokazuje, jak funkcje zarządzane i niezarządzane mogą współistnieć w tym samym module.
proces __declspec modyfikator __declspec modyfikator, który zezwala na istnienie zmiennych statycznych i globalnych na proces.
Odbicie (C++/CLI) Pokazuje wersję środowiska CLR informacji o typie czasu wykonywania.
Ciąg Omawia konwersję kompilatora literałów ciągów do 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 kompilowany.
Atrybuty zdefiniowane przez użytkownika Pokazuje zdefiniowane przez użytkownika atrybuty.
#using — dyrektywa Importuje zestawy zewnętrzne.
Dokumentacja XML Objaśnia dokumentację kodu opartą na języku XML za pomocą /doc (Przetwarzaj komentarze dokumentacji) (C/C++)

Zobacz też

Programowanie .NET w języku C++/interfejsie wiersza polecenia (Visual C++)
Współdziałanie natywne i .NET