Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les génériques C# et les modèles C++ sont les deux fonctionnalités de langage qui prennent en charge les types paramétrables. Toutefois, il existe de nombreuses différences entre les deux. Au niveau de la syntaxe, les génériques C# sont une approche plus simple des types paramétrables sans la complexité des modèles C++. En outre, C# ne tente pas de fournir toutes les fonctionnalités que les modèles C++ fournissent. Au niveau de l’implémentation, la principale différence est que les substitutions de type générique C# sont effectuées au moment de l’exécution et que les informations de type générique sont ainsi conservées pour les objets instanciés. Pour plus d’informations, consultez Génériques dans le runtime.
Voici les principales différences entre les modèles génériques C# et C++ :
Les génériques C# ne fournissent pas la même flexibilité que les modèles C++. Par exemple, il n’est pas possible d’appeler des opérateurs arithmétiques dans une classe générique C#, bien qu’il soit possible d’appeler des opérateurs définis par l’utilisateur.
C# n’autorise pas les paramètres de modèle non de type, tels que
template C<int i> {}
.C# ne prend pas en charge la spécialisation explicite ; autrement dit, une implémentation personnalisée d’un modèle pour un type spécifique.
C# ne prend pas en charge la spécialisation partielle : une implémentation personnalisée pour un sous-ensemble des arguments de type.
C# n’autorise pas l’utilisation du paramètre de type comme classe de base pour le type générique.
C# n’autorise pas les paramètres de type à avoir des types par défaut.
En C#, un paramètre de type générique ne peut pas lui-même être générique, bien que les types construits puissent être utilisés comme génériques. C++ autorise les paramètres de modèle.
C++ autorise le code qui peut ne pas être valide pour tous les paramètres de type dans le modèle, qui est ensuite vérifié pour le type spécifique utilisé comme paramètre de type. C# exige que le code d’une classe soit écrit de telle sorte qu’il fonctionne avec n’importe quel type qui répond aux contraintes. Par exemple, en C++, il est possible d’écrire une fonction qui utilise les opérateurs arithmétiques
+
et-
sur les objets du paramètre de type, ce qui génère une erreur au moment de l’instanciation du modèle avec un type qui ne prend pas en charge ces opérateurs. C# interdit cela ; les seules constructions de langage autorisées sont celles qui peuvent être déduites des contraintes.