Rozszerzenia składników dla platformy .NET i platformy uniwersalnej systemu WindowsComponent Extensions for .NET and UWP

Standard C++ umożliwia dostawcom kompilatora udostępnianie niestandardowych rozszerzeń w języku.The C++ standard allows compiler vendors to provide non-standard extensions to the language. 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).Microsoft provides extensions to help you connect native C++ code to code that runs on the .NET Framework or the Universal Windows Platform (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.The .NET extensions are called C++/CLI and produce code that executes in the .NET managed execution environment that is called the Common Language Runtime (CLR). Rozszerzenia platformy UWP są nazywane C++/CX i tworzą natywny kod maszynowy.The UWP extensions are called C++/CX and they produce native machine code.

Uwaga

W przypadku nowych aplikacji zalecamy użycie języka C++/WinRT zamiast języka C++/CX.For new applications, we recommend using C++/WinRT rather than C++/CX. C++/WinRT to nowy, standardowy język C++ 17 przeznaczony do środowisko wykonawcze systemu Windows interfejsów API.C++/WinRT is a new, standard C++17 language projection for Windows Runtime APIs. Będziemy nadal obsługiwać C++/CX i WRL, ale zdecydowanie zaleca się, aby nowe aplikacje korzystały z języka C++/WinRT.We will continue to support C++/CX and WRL, but highly recommend that new applications use C++/WinRT. Aby uzyskać więcej informacji, zobacz C++/WinRT.For more information, see C++/WinRT.

Dwa środowiska uruchomieniowe, jeden zestaw rozszerzeńTwo runtimes, one set of extensions

C++/CLI rozszerza standard ISO/ANSI C++ i jest zdefiniowany w standardzie ECMA C++/CLI.C++/CLI extends the ISO/ANSI C++ standard, and is defined under the Ecma C++/CLI Standard. Aby uzyskać więcej informacji, zobacz programowanie .NET przy użyciu języka C++/CLI (Visual C++).For more information, see .NET Programming with C++/CLI (Visual C++).

Rozszerzenia C++/CX są podzbiorem języka C++/CLI.The C++/CX extensions are a subset of 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.Although the extension syntax is identical in most cases, the code that is generated depends on whether you specify the /ZW compiler option to target UWP, or the /clr option to target .NET. Te przełączniki są ustawiane automatycznie w przypadku tworzenia projektu przy użyciu programu Visual Studio.These switches are set automatically when you use Visual Studio to create a project.

Słowa kluczowe typu danychData Type Keywords

Rozszerzenia języka obejmują zagregowane słowa kluczowe, które składają się z dwóch tokenów oddzielonych znakami odstępu.The language extensions include aggregate keywords, which consist of two tokens separated by white space. Tokeny mogą mieć jedno znaczenie, gdy są używane oddzielnie, i inne znaczenie, gdy są używane razem.The tokens might have one meaning when they are used separately, and another meaning when they are used together. Na przykład słowo "ref" jest zwykłym identyfikatorem, a słowo "Class" jest słowem kluczowym, które deklaruje klasę natywną.For example, the word "ref" is an ordinary identifier, and the word "class" is a keyword that declares a native class. 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.But when these words are combined to form ref class, the resulting aggregate keyword declares an entity that is known as a runtime class.

Rozszerzenia zawierają również kontekstowe słowa kluczowe.The extensions also include context-sensitive keywords. Słowo kluczowe jest traktowane jako kontekstowe, w zależności od rodzaju instrukcji zawierającej ją, i jej umieszczenia w tej instrukcji.A keyword is treated as context-sensitive depending on the kind of statement that contains it, and its placement in that statement. Na przykład token "Property" może być identyfikatorem lub może deklarować specjalny rodzaj składowej klasy publicznej.For example, the token "property" can be an identifier, or it can declare a special kind of public class member.

Poniższa tabela zawiera listę słów kluczowych w rozszerzeniu języka C++.The following table lists keywords in the C++ language extension.

Słowo kluczoweKeyword KontekstoweContext sensitive PrzeznaczeniePurpose DokumentacjaReference
ref — Klasaref class

ref — strukturaref struct
NieNo Deklaruje klasę.Declares a class. Klasy i strukturyClasses and Structs
Klasa wartościvalue class

Struktura wartościvalue struct
NieNo Deklaruje klasę wartości.Declares a value class. Klasy i strukturyClasses and Structs
interface, klasainterface class

Struktura interfejsuinterface struct
NieNo Deklaruje interfejs.Declares an interface. interface, klasainterface class
enum, klasaenum class

Wyliczenie — strukturaenum struct
NieNo Deklaruje Wyliczenie.Declares an enumeration. enum, klasaenum class
property TakYes Deklaruje właściwość.Declares a property. wartośćproperty
Wierzdelegate TakYes Deklaruje delegata.Declares a delegate. delegat (C++/CLI i C++/CX)delegate (C++/CLI and C++/CX)
wydarzenevent TakYes Deklaruje zdarzenie.Declares an event. wydarzenevent

Specyfikatory zastąpieniaOverride Specifiers

Możesz użyć następujących słów kluczowych, aby zakwalifikować zachowanie przesłaniania dla celów pochodnych.You can use the following keywords to qualify override behavior for derivation. 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.Although the new keyword is not an extension of C++, it is listed here because it can be used in an additional context. Niektóre specyfikatory są również prawidłowe dla programowania natywnego.Some specifiers are also valid for native programming. Aby uzyskać więcej informacji, zobacz jak: deklarowanie specyfikatorów przesłonięć w kompilacjach natywnych (C++/CLI).For more information, see How to: Declare Override Specifiers in Native Compilations (C++/CLI).

Słowo kluczoweKeyword KontekstoweContext Sensitive PrzeznaczeniePurpose DokumentacjaReference
streszczeńabstract TakYes Wskazuje, że funkcje lub klasy są abstrakcyjne.Indicates that functions or classes are abstract. streszczeńabstract
new NieNo Wskazuje, że funkcja nie jest przesłonięciem wersji klasy bazowej.Indicates that a function is not an override of a base class version. new (nowe gniazdo w vtable)new (new slot in vtable)
overrideoverride TakYes Wskazuje, że metoda musi być przesłonięciem wersji klasy bazowej.Indicates that a method must be an override of a base-class version. overrideoverride
sealedsealed TakYes Zapobiega używaniu klas jako klas bazowych.Prevents classes from being used as base classes. sealedsealed

Słowa kluczowe dla typów ogólnychKeywords for Generics

Dodano następujące słowa kluczowe do obsługi typów ogólnych.The following keywords have been added to support generic types. Aby uzyskać więcej informacji, zobacz Ogólne.For more information, see Generics.

Słowo kluczoweKeyword KontekstoweContext sensitive PrzeznaczeniePurpose
ogólnegogeneric NieNo Deklaruje typ ogólny.Declares a generic type.
miejscuwhere TakYes Określa ograniczenia, które są stosowane do parametru typu ogólnego.Specifies the constraints that are applied to a generic type parameter.

Różne słowa kluczoweMiscellaneous Keywords

Do rozszerzeń języka C++ dodano następujące słowa kluczowe.The following keywords have been added to the C++ extensions.

Słowo kluczoweKeyword KontekstoweContext sensitive PrzeznaczeniePurpose DokumentacjaReference
finallyfinally TakYes Wskazuje domyślne zachowanie obsługi wyjątków.Indicates default exception handlings behavior. Obsługa wyjątkówException Handling
for each, infor each, in NieNo Wylicza elementy kolekcji.Enumerates elements of a collection. for each, infor each, in
gcnewgcnew NieNo Przydziela typy na stosie zebranych elementów bezużytecznych.Allocates types on the garbage-collected heap. Użyj zamiast new i delete .Use instead of new and delete. ref new, gcnewref new, gcnew
nowe odwołaniaref new TakYes Przypisuje typ środowisko wykonawcze systemu Windows.Allocates a Windows Runtime type. Użyj zamiast new i delete .Use instead of new and delete. ref new, gcnewref new, gcnew
initonlyinitonly TakYes Wskazuje, że element członkowski może być zainicjowany tylko w deklaracji lub w konstruktorze statycznym.Indicates that a member can only be initialized at declaration or in a static constructor. initonly (C++/CLI)initonly (C++/CLI)
wpisaćliteral TakYes Tworzy zmienną literału.Creates a literal variable. wpisaćliteral
nullptr NieNo Oznacza, że uchwyt lub wskaźnik nie wskazuje na obiekt.Indicates that a handle or pointer does not point at an object. nullptrnullptr

Konstrukcje szablonuTemplate Constructs

Poniższe konstrukcje języka są implementowane jako szablony, a nie słowa kluczowe.The following language constructs are implemented as templates, instead of as keywords. Jeśli określisz /ZW opcję kompilatora, są one zdefiniowane w lang przestrzeni nazw.If you specify the /ZW compiler option, they are defined in the lang namespace. Jeśli określisz /clr opcję kompilatora, są one zdefiniowane w cli przestrzeni nazw.If you specify the /clr compiler option, they are defined in the cli namespace.

Słowo kluczoweKeyword PrzeznaczeniePurpose DokumentacjaReference
arrayarray Deklaruje tablicę.Declares an array. TabliceArrays
interior_ptrinterior_ptr (Tylko CLR) Wskazuje dane w typie referencyjnym.(CLR only) Points to data in a reference type. interior_ptr (C++/CLI)interior_ptr (C++/CLI)
pin_ptrpin_ptr (Tylko CLR) Wskazuje typy odwołań CLR do tymczasowego pomijania systemu odzyskiwania pamięci.(CLR only) Points to CLR reference types to temporarily suppress the garbage-collection system. pin_ptr (C++/CLI)pin_ptr (C++/CLI)
safe_castsafe_cast Określa i wykonuje metodę optymalnego rzutowania dla typu środowiska uruchomieniowego.Determines and executes the optimal casting method for a runtime type. safe_castsafe_cast
typeid (Tylko CLR) Pobiera System.Type obiekt, który opisuje dany typ lub obiekt.(CLR only) Retrieves a System.Type object that describes the given type or object. typeidtypeid

DeklaratoryDeclarators

Następujący typ Deklaratory powoduje, że środowisko uruchomieniowe automatycznie zarządza okresem istnienia i usuwaniem przyznanych obiektów.The following type declarators instruct the runtime to automatically manage the lifetime and deletion of allocated objects.

OperatorOperator PrzeznaczeniePurpose DokumentacjaReference
^ 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ć.Declares a handle to an object; that is, a pointer to a Windows Runtime or CLR object that is automatically deleted when it is no longer usable. Operator uchwytu do obiektu (^)Handle to Object Operator (^)
% 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ć.Declares a tracking reference; that is, a reference to a Windows Runtime or CLR object that is automatically deleted when it is no longer usable. Operator odwołania śledzeniaTracking Reference Operator

Ta sekcja zawiera listę dodatkowych konstrukcji programistycznych i tematów odnoszących się do środowiska CLR.This section lists additional programming constructs, and topics that pertain to the CLR.

TematTopic OpisDescription
__identifier (C++/CLI)__identifier (C++/CLI) (Środowisko wykonawcze systemu Windows i CLR) Umożliwia używanie słów kluczowych jako identyfikatorów.(Windows Runtime and CLR) Enables the use of keywords as identifiers.
Listy zmiennych argumentów (...) (C++/CLI)Variable Argument Lists (...) (C++/CLI) (Środowisko wykonawcze systemu Windows i CLR) Włącza funkcję, aby przyjmować zmienną liczbę argumentów.(Windows Runtime and CLR) Enables a function to take a variable number of arguments.
Odpowiedniki typów natywnych języka C++ w programie .NET Framework (C++/CLI).NET Framework Equivalents to C++ Native Types (C++/CLI) Wyświetla listę typów CLR, które są używane zamiast typów całkowitych języka C++.Lists the CLR types that are used in place of C++ integral types.
domena aplikacji __declspec modyfikatorappdomain __declspec modifier __declspec modyfikator, który jest upoważniony do istnienia zmiennych statycznych i globalnych na domenę aplikacji.__declspec modifier that mandates that static and global variables exist per appdomain.
Rzutowania w stylu C i kompilator /clr (C++/CLI)C-Style Casts with /clr (C++/CLI) Opisuje, jak są interpretowane rzutowania w stylu języka C.Describes how C-style casts are interpreted.
__clrcall konwencji wywoływania__clrcall calling convention Wskazuje konwencję wywoływania zgodną ze środowiskiem CLR.Indicates the CLR-compliant calling convention.
__cplusplus_cli Wstępnie zdefiniowane makraPredefined Macros
Atrybuty niestandardoweCustom Attributes Opisuje sposób definiowania własnych atrybutów CLR.Describes how to define your own CLR attributes.
Obsługa wyjątkówException Handling Zawiera omówienie obsługi wyjątków.Provides an overview of exception handling.
Jawne zastąpieniaExplicit Overrides Pokazuje, jak funkcje Członkowskie mogą przesłaniać dowolnych członków.Demonstrates how member functions can override arbitrary members.
Zaprzyjaźnione zestawy (C++)Friend Assemblies (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.Discusses how a client assembly can access all types in an assembly component.
BoxingBoxing Pokazuje warunki, w których typy wartości są opakowane.Demonstrates the conditions in which values types are boxed.
Obsługa kompilatora dla cech typuCompiler Support for Type Traits Omawia sposób wykrywania właściwości typów w czasie kompilacji.Discusses how to detect characteristics of types at compile time.
zarządzane, niezarządzane dyrektywy pragmamanaged, unmanaged pragmas Pokazuje, jak funkcje zarządzane i niezarządzane mogą współistnieć w tym samym module.Demonstrates how managed and unmanaged functions can co-exist in the same module.
proces __declspec modyfikatorprocess __declspec modifier __declspec modyfikator, który zezwala na istnienie zmiennych statycznych i globalnych na proces.__declspec modifier that mandates that static and global variables exist per process.
Odbicie (C++/CLI)Reflection (C++/CLI) Pokazuje wersję środowiska CLR informacji o typie czasu wykonywania.Demonstrates the CLR version of run-time type information.
CiągString Omawia konwersję kompilatora literałów ciągów do String .Discusses compiler conversion of string literals to String.
Przekazywanie dalej typu (C++/CLI)Type Forwarding (C++/CLI) Umożliwia przenoszenie typu w zestawie wysyłkowym do innego zestawu, dzięki czemu kod klienta nie musi być ponownie kompilowany.Enables the movement of a type in a shipping assembly to another assembly so that client code does not have to be recompiled.
Atrybuty zdefiniowane przez użytkownikaUser-Defined Attributes Pokazuje zdefiniowane przez użytkownika atrybuty.Demonstrates user-defined attributes.
#using — dyrektywa#using Directive Importuje zestawy zewnętrzne.Imports external assemblies.
Dokumentacja XMLXML Documentation Objaśnia dokumentację kodu opartą na języku XML za pomocą /doc (Przetwarzaj komentarze dokumentacji) (C/C++)Explains XML-based code documentation by using /doc (Process Documentation Comments) (C/C++)

Zobacz teżSee also

Programowanie .NET w języku C++/interfejsie wiersza polecenia (Visual C++).NET Programming with C++/CLI (Visual C++)
Współdziałanie natywne i .NETNative and .NET Interoperability