Extensions de composants pour .NET et UWPComponent Extensions for .NET and UWP

Le langage C++ standard permet aux fournisseurs de compilateur de fournir des extensions non standard au langage.The C++ standard allows compiler vendors to provide non-standard extensions to the language. Microsoft fournit des extensions pour vous aider à connecter du code C++ natif à du code qui fonctionne sur .NET Framework ou la plateforme Windows universelle (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). Les extensions .NET sont appelées C++/CLI et produisent du code qui fonctionne dans l’environnement d’exécution managé .NET appelé le common language runtime (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). Les extensions UWP sont appelées C++/CX et produisent du code machine natif.The UWP extensions are called C++/CX and they produce native machine code.

Notes

Pour les nouvelles applications, nous recommandons l’utilisation de C++/WinRT plutôt que C++/CX.For new applications, we recommend using C++/WinRT rather than C++/CX. C++/ WinRT est une nouvelle projection du langage C++17 standard pour les API Windows Runtime.C++/WinRT is a new, standard C++17 language projection for Windows Runtime APIs. Nous continuerons de prendre en charge les langages C++/CX et WRL, mais recommandons vivement l’utilisation du langage C++/WinRT avec des nouvelles applications.We will continue to support C++/CX and WRL, but highly recommend that new applications use C++/WinRT. Pour plus d’informations, consultez C++/WinRT.For more information, see C++/WinRT.

Deux runtimes, un ensemble d’extensionsTwo runtimes, one set of extensions

C++/CLI étend la norme ISO/ANSI C++. Sa définition entre dans la norme Ecma C++/CLI.C++/CLI extends the ISO/ANSI C++ standard, and is defined under the Ecma C++/CLI Standard. Pour plus d’informations, consultez Programmation .NET avec C++/CLI (Visual C++).For more information, see .NET Programming with C++/CLI (Visual C++).

Les extensions C++/CX représentent un sous-ensemble de C++/CLI.The C++/CX extensions are a subset of C++/CLI. Bien que la syntaxe d’extension soit identique dans la plupart des cas, le code généré sera différent selon si vous spécifiez l’option de compilateur /ZW pour cibler UWP, ou l’option /clr pour cibler .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. Ces commutateurs sont définis automatiquement quand vous utilisez Visual Studio pour créer un projet.These switches are set automatically when you use Visual Studio to create a project.

Mots clés de type de donnéesData Type Keywords

Les extensions de langage incluent des mots clés d’agrégation, constitués de deux jetons séparés par un espace blanc.The language extensions include aggregate keywords, which consist of two tokens separated by white space. Les jetons peuvent avoir une signification précise quand ils sont utilisés séparément et une autre signification quand ils sont utilisés ensemble.The tokens might have one meaning when they are used separately, and another meaning when they are used together. Par exemple, le mot « ref » est un identificateur ordinaire et le mot « class » est un mot clé qui déclare une classe native.For example, the word "ref" is an ordinary identifier, and the word "class" is a keyword that declares a native class. Mais quand ces mots sont combinés pour former ref class, le mot clé d’agrégation obtenu permet de déclarer une entité connue en tant que classe runtime.But when these words are combined to form ref class, the resulting aggregate keyword declares an entity that is known as a runtime class.

Les extensions incluent également des mots clés contextuels.The extensions also include context-sensitive keywords. Un mot clé est considéré comme contextuel en fonction du type d'instruction qui le contient et de son positionnement dans cette instruction.A keyword is treated as context-sensitive depending on the kind of statement that contains it, and its placement in that statement. Par exemple, le jeton « property » peut être un identificateur ou il peut déclarer un type spécial de membre de classe publique.For example, the token "property" can be an identifier, or it can declare a special kind of public class member.

Le tableau suivant répertorie les mots clés de l'extension du langage C++.The following table lists keywords in the C++ language extension.

Mot cléKeyword ContextuelContext sensitive ObjectifPurpose Informations de référenceReference
ref classref class

ref structref struct
NonNo Déclare une classe.Declares a class. Classes et structsClasses and Structs
value classvalue class

value structvalue struct
NonNo Déclare une classe de valeur.Declares a value class. Classes et structsClasses and Structs
interface, classeinterface class

interface structinterface struct
NonNo Déclare une interface.Declares an interface. interface, classeinterface class
enum, classeenum class

enum structenum struct
NonNo Déclare une énumération.Declares an enumeration. enum, classeenum class
property OuiYes Déclare une propriété.Declares a property. propertyproperty
delegatedelegate OuiYes Déclare un délégué.Declares a delegate. délégué (C++/CLI et C++/CX)delegate (C++/CLI and C++/CX)
eventevent OuiYes Déclare un événement.Declares an event. eventevent

Spécificateurs de substitutionOverride Specifiers

Vous pouvez utiliser les mots clés suivants pour qualifier le comportement de substitution pour la dérivation.You can use the following keywords to qualify override behavior for derivation. Bien que le new mot clé ne soit pas une extension de C++, il est répertorié ici, car il peut être utilisé dans un contexte supplémentaire.Although the new keyword is not an extension of C++, it is listed here because it can be used in an additional context. Certains spécificateurs sont également valides pour la programmation native.Some specifiers are also valid for native programming. Pour plus d’informations, consultez Comment : déclarer des spécificateurs de substitution dans les compilations natives (C++/CLI).For more information, see How to: Declare Override Specifiers in Native Compilations (C++/CLI).

Mot cléKeyword ContextuelContext Sensitive ObjectifPurpose Informations de référenceReference
abstractionabstract OuiYes Indique que les fonctions ou classes sont abstraites.Indicates that functions or classes are abstract. abstractionabstract
new NonNo Indique qu'une fonction n'est pas une substitution d'une version de la classe de base.Indicates that a function is not an override of a base class version. new (nouvel emplacement dans vtable)new (new slot in vtable)
overrideoverride OuiYes Indique qu'une méthode doit être une substitution d'une version de la classe de base.Indicates that a method must be an override of a base-class version. overrideoverride
sealedsealed OuiYes Empêche les classes d'être utilisées comme classes de base.Prevents classes from being used as base classes. sealedsealed

Mots clés pour les génériquesKeywords for Generics

Les mots clés suivants ont été ajoutés pour prendre en charge des types génériques.The following keywords have been added to support generic types. Pour plus d’informations, consultez Génériques.For more information, see Generics.

Mot cléKeyword ContextuelContext sensitive ObjectifPurpose
classesgeneric NonNo Déclare un type générique.Declares a generic type.
wherewhere OuiYes Spécifie les contraintes appliquées à un paramètre de type générique.Specifies the constraints that are applied to a generic type parameter.

Mots clés diversMiscellaneous Keywords

Les mots clés suivants ont été ajoutés aux extensions C++.The following keywords have been added to the C++ extensions.

Mot cléKeyword ContextuelContext sensitive ObjectifPurpose Informations de référenceReference
suiviefinally OuiYes Indique le comportement de gestion des exceptions par défaut.Indicates default exception handlings behavior. Gestion des exceptionsException Handling
for each, infor each, in NonNo Énumère les éléments d’une collection.Enumerates elements of a collection. for each, infor each, in
gcnewgcnew NonNo Alloue des types sur le tas récupéré par le garbage collector.Allocates types on the garbage-collected heap. Utilisez à la place de new et delete .Use instead of new and delete. ref new, gcnewref new, gcnew
ref newref new OuiYes Alloue un type Windows Runtime.Allocates a Windows Runtime type. Utilisez à la place de new et delete .Use instead of new and delete. ref new, gcnewref new, gcnew
initonlyinitonly OuiYes Indique qu’un membre peut uniquement être initialisé lors de la déclaration ou dans un constructeur statique.Indicates that a member can only be initialized at declaration or in a static constructor. initonly (C++/CLI)initonly (C++/CLI)
literalliteral OuiYes Crée une variable littérale.Creates a literal variable. literalliteral
nullptr NonNo Indique qu'un handle ou pointeur ne pointe pas vers un objet.Indicates that a handle or pointer does not point at an object. nullptrnullptr

Constructions de modèleTemplate Constructs

Les constructions de langage suivantes sont implémentées comme modèles, plutôt que comme mots clés.The following language constructs are implemented as templates, instead of as keywords. Si vous spécifiez l'option de compilateur /ZW, elles sont définies dans l'espace de noms lang.If you specify the /ZW compiler option, they are defined in the lang namespace. Si vous spécifiez l'option de compilateur /clr, elles sont définies dans l'espace de noms cli.If you specify the /clr compiler option, they are defined in the cli namespace.

Mot cléKeyword ObjectifPurpose Informations de référenceReference
arrayarray Déclare un tableau.Declares an array. TableauxArrays
interior_ptrinterior_ptr (CLR uniquement) Pointe vers des données dans un type de référence.(CLR only) Points to data in a reference type. interior_ptr (C++/CLI)interior_ptr (C++/CLI)
pin_ptrpin_ptr (CLR uniquement) Pointe vers des types de référence CLR pour supprimer temporairement le système de garbage collection.(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 Détermine et exécute la méthode de casting optimale pour un type de runtime.Determines and executes the optimal casting method for a runtime type. safe_castsafe_cast
typeid (CLR uniquement) Récupère un objet System.Type qui décrit le type ou l'objet donné.(CLR only) Retrieves a System.Type object that describes the given type or object. TypeIdtypeid

DéclarateursDeclarators

Les déclarateurs de type suivants demandent au runtime de gérer automatiquement la durée de vie et la suppression des objets alloués.The following type declarators instruct the runtime to automatically manage the lifetime and deletion of allocated objects.

OpérateurOperator ObjectifPurpose Informations de référenceReference
^ Déclare un handle à un objet ; autrement dit, un pointeur vers un objet Windows Runtime ou CLR qui est automatiquement supprimé quand il n’est plus utilisable.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. Descripteur to Object, opérateur (^)Handle to Object Operator (^)
% Déclare une référence de suivi ; autrement dit, une référence vers un objet Windows Runtime ou CLR qui est automatiquement supprimé quand il n’est plus utilisable.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. Opérateur de référence de suiviTracking Reference Operator

Cette section répertorie les constructions de programmation supplémentaires, ainsi que les rubriques qui se rapportent au CLR.This section lists additional programming constructs, and topics that pertain to the CLR.

RubriqueTopic DescriptionDescription
__identifier (C++/CLI)__identifier (C++/CLI) (Windows Runtime et CLR) Permet d’utiliser des mots clés en tant qu’identificateurs.(Windows Runtime and CLR) Enables the use of keywords as identifiers.
Listes d’arguments de variable (...) (C++/CLI)Variable Argument Lists (...) (C++/CLI) (Windows Runtime et CLR) Permet à une fonction de prendre un nombre variable d’arguments.(Windows Runtime and CLR) Enables a function to take a variable number of arguments.
.NET Framework équivalents aux types natifs C++ (C++/CLI).NET Framework Equivalents to C++ Native Types (C++/CLI) Répertorie les types CLR qui sont utilisés à la place des types intégraux C++.Lists the CLR types that are used in place of C++ integral types.
domaine __declspec d’application modificateurappdomain __declspec modifier __declspec modificateur qui impose que des variables statiques et globales existent par AppDomain.__declspec modifier that mandates that static and global variables exist per appdomain.
Casts de style C avec /clr (C++/CLI)C-Style Casts with /clr (C++/CLI) Décrit comment les casts de style C sont interprétées.Describes how C-style casts are interpreted.
Convention d’appel __clrcall__clrcall calling convention Indique la convention d’appel conforme au CLR.Indicates the CLR-compliant calling convention.
__cplusplus_cli Macros prédéfiniesPredefined Macros
Attributs personnalisésCustom Attributes Décrit comment définir vos propres attributs CLR.Describes how to define your own CLR attributes.
Gestion des exceptionsException Handling Fournit une vue d'ensemble de la gestion des exceptions.Provides an overview of exception handling.
Substitutions explicitesExplicit Overrides Montre comment les fonctions membres peuvent substituer les membres arbitraires.Demonstrates how member functions can override arbitrary members.
Assemblys friend (C++)Friend Assemblies (C++) Explique comment un assembly client peut accéder à tous les types dans un composant d'assembly.Discusses how a client assembly can access all types in an assembly component.
BoxingBoxing Montre les conditions dans lesquelles les types de valeur sont boxed.Demonstrates the conditions in which values types are boxed.
Prise en charge du compilateur pour les traits de typeCompiler Support for Type Traits Explique comment détecter les caractéristiques des types au moment de la compilation.Discusses how to detect characteristics of types at compile time.
pragmas managés, non managésmanaged, unmanaged pragmas Montre comment les fonctions managées et non managées peuvent coexister dans le même module.Demonstrates how managed and unmanaged functions can co-exist in the same module.
processus __declspec modificateurprocess __declspec modifier __declspec modificateur qui impose que des variables statiques et globales existent par processus.__declspec modifier that mandates that static and global variables exist per process.
Réflexion (C++/CLI)Reflection (C++/CLI) Montre la version CLR des informations de type au moment de l'exécution.Demonstrates the CLR version of run-time type information.
ChaîneString Décrit la conversion du compilateur des littéraux de chaîne en String.Discusses compiler conversion of string literals to String.
Transfert de type (C++-CLI)Type Forwarding (C++/CLI) Permet le déplacement d'un type dans un assembly d'expédition vers un autre assembly afin que le code client n'ait pas besoin d'être recompilé.Enables the movement of a type in a shipping assembly to another assembly so that client code does not have to be recompiled.
Attributs définis par l’utilisateurUser-Defined Attributes Montre les attributs définis par l'utilisateur.Demonstrates user-defined attributes.
#using directive#using Directive Importe des assemblys externes.Imports external assemblies.
Documentation XMLXML Documentation Explique la documentation du code XML à l’aide de /doc (Traiter les commentaires de documentation) (C/C++).Explains XML-based code documentation by using /doc (Process Documentation Comments) (C/C++)

Voir aussiSee also

Programmation .NET avec C++/CLI (Visual C++).NET Programming with C++/CLI (Visual C++)
Interopérabilité native et .NETNative and .NET Interoperability