Extensions de composants pour .NET et UWP
Le langage C++ standard permet aux fournisseurs de compilateur de fournir des extensions non standard au langage. 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). 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). Les extensions UWP sont appelées C++/CX et produisent du code machine natif.
Remarque
Pour les nouvelles applications, nous recommandons l’utilisation de C++/WinRT plutôt que C++/CX. C++/ WinRT est une nouvelle projection du langage C++17 standard pour les API Windows Runtime. 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. Pour plus d’informations, consultez C++/WinRT.
Deux runtimes, un ensemble d’extensions
C++/CLI étend la norme ISO/ANSI C++. Sa définition entre dans la norme Ecma C++/CLI. Pour plus d’informations, consultez Programmation .NET avec C++/CLI (Visual C++).
Les extensions C++/CX représentent un sous-ensemble de 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. Ces commutateurs sont définis automatiquement quand vous utilisez Visual Studio pour créer un projet.
Mots clés de type de données
Les extensions de langage incluent des mots clés d’agrégation, constitués de deux jetons séparés par un espace blanc. 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. Par exemple, le mot « ref » est un identificateur ordinaire et le mot « class » est un mot clé qui déclare une classe native. 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.
Les extensions incluent également des mots clés contextuels. Un mot clé est considéré comme contextuel en fonction du type d'instruction qui le contient et de son positionnement dans cette instruction. Par exemple, le jeton « property » peut être un identificateur ou il peut déclarer un type spécial de membre de classe publique.
Le tableau suivant répertorie les mots clés de l'extension du langage C++.
Mot clé | Contextuel | Objectif | Référence |
---|---|---|---|
ref class ref struct |
Non | Déclare une classe. | Classes et structs |
value class value struct |
Non | Déclare une classe de valeur. | Classes et structs |
interface, classe interface struct |
Non | Déclare une interface. | interface, classe |
enum, classe enum struct |
Non | Déclare une énumération. | enum, classe |
property |
Oui | Déclare une propriété. | propriété |
delegate | Oui | Déclare un délégué. | délégué (C++/CLI et C++/CX) |
event | Oui | Déclare un événement. | event |
Spécificateurs de substitution
Vous pouvez utiliser les mots clés suivants pour qualifier le comportement de substitution pour la dérivation. Bien que le mot clé new
ne soit pas une extension de C++, il est répertorié ici car il peut être utilisé dans un autre contexte. Certains spécificateurs sont également valides pour la programmation native. Pour plus d’informations, consultez Comment : déclarer des spécificateurs de substitution dans les compilations natives (C++/CLI).
Mot clé | Contextuel | Objectif | Référence |
---|---|---|---|
abstract | Oui | Indique que les fonctions ou classes sont abstraites. | abstract |
new |
Non | Indique qu'une fonction n'est pas une substitution d'une version de la classe de base. | new (nouvel emplacement dans vtable) |
override | Oui | Indique qu'une méthode doit être une substitution d'une version de la classe de base. | override |
sealed | Oui | Empêche les classes d'être utilisées comme classes de base. | sealed |
Mots clés pour les génériques
Les mots clés suivants ont été ajoutés pour prendre en charge des types génériques. Pour plus d’informations, consultez Génériques.
Mot clé | Contextuel | Objectif |
---|---|---|
generic | Non | Déclare un type générique. |
where | Oui | Spécifie les contraintes appliquées à un paramètre de type générique. |
Mots clés divers
Les mots clés suivants ont été ajoutés aux extensions C++.
Mot clé | Contextuel | Objectif | Référence |
---|---|---|---|
finally | Oui | Indique le comportement de gestion des exceptions par défaut. | Gestion des exceptions |
for each, in | Non | Énumère les éléments d’une collection. | for each, in |
gcnew | Non | Alloue des types sur le tas récupéré par le garbage collector. À utiliser à la place de new et de delete . |
ref new, gcnew |
ref new | Oui | Alloue un type Windows Runtime. À utiliser à la place de new et de delete . |
ref new, gcnew |
initonly | Oui | Indique qu’un membre peut uniquement être initialisé lors de la déclaration ou dans un constructeur statique. | initonly (C++-CLI) |
literal | Oui | Crée une variable littérale. | literal |
nullptr |
Non | Indique qu'un handle ou pointeur ne pointe pas vers un objet. | nullptr |
Constructions de modèle
Les constructions de langage suivantes sont implémentées comme modèles, plutôt que comme mots clés. Si vous spécifiez l'option de compilateur /ZW
, elles sont définies dans l'espace de noms lang
. Si vous spécifiez l'option de compilateur /clr
, elles sont définies dans l'espace de noms cli
.
Mot clé | Objectif | Référence |
---|---|---|
array | Déclare un tableau. | Tableaux |
interior_ptr | (CLR uniquement) Pointe vers des données dans un type de référence. | interior_ptr (C++-CLI) |
pin_ptr | (CLR uniquement) Pointe vers des types de référence CLR pour supprimer temporairement le système de garbage collection. | pin_ptr (C++-CLI) |
safe_cast | Détermine et exécute la méthode de casting optimale pour un type de runtime. | safe_cast |
typeid |
(CLR uniquement) Récupère un objet System.Type qui décrit le type ou l'objet donné. | typeid |
Déclarateurs
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.
Opérateur | Objectif | Référence |
---|---|---|
^ |
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. | Handle sur l'opérateur Object (^) |
% |
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. | Opérateur de référence de suivi |
Constructions supplémentaires et rubriques connexes
Cette section répertorie les constructions de programmation supplémentaires, ainsi que les rubriques qui se rapportent au CLR.
Sujet | Description |
---|---|
__identifier (C++-CLI) | (Windows Runtime et CLR) Permet d’utiliser des mots clés en tant qu’identificateurs. |
Listes d’arguments de variable (...) (C++-CLI) | (Windows Runtime et CLR) Permet à une fonction de prendre un nombre variable d’arguments. |
Équivalents .NET Framework des types natifs C++ (C++-CLI) | Répertorie les types CLR qui sont utilisés à la place des types intégraux C++. |
modificateur __declspec appdomain |
Modificateur __declspec qui impose que des variables statiques et globales existent par appdomain. |
Casts de style C avec /clr (C++/CLI) | Décrit comment les casts de style C sont interprétées. |
Convention d’appel __clrcall | Indique la convention d’appel conforme au CLR. |
__cplusplus_cli |
Macros prédéfinies |
Attributs personnalisés | Décrit comment définir vos propres attributs CLR. |
Gestion des exceptions | Fournit une vue d'ensemble de la gestion des exceptions. |
Substitutions explicites | Montre comment les fonctions membres peuvent substituer les membres arbitraires. |
Assemblys friend (C++) | Explique comment un assembly client peut accéder à tous les types dans un composant d'assembly. |
Boxing | Montre les conditions dans lesquelles les types de valeur sont boxed. |
Prise en charge du compilateur pour les Type Traits | Explique comment détecter les caractéristiques des types au moment de la compilation. |
Pragmas managés, non managés | Montre comment les fonctions managées et non managées peuvent coexister dans le même module. |
modificateur du __declspec processus |
Modificateur __declspec qui impose que des variables statiques et globales existent par process. |
Réflexion (C++-CLI) | Montre la version CLR des informations de type au moment de l'exécution. |
Chaîne | Décrit la conversion du compilateur des littéraux de chaîne en String. |
Transfert de type (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é. |
Attributs définis par l'utilisateur | Montre les attributs définis par l'utilisateur. |
Directive #using | Importe des assemblys externes. |
Documentation XML | Explique la documentation du code XML à l’aide de /doc (Traiter les commentaires de documentation) (C/C++). |
Voir aussi
Programmation .NET avec C++/CLI (Visual C++)
Interopérabilité native et .NET