Maison >développement back-end >C++ >Pourquoi C# n'a-t-il pas d'inférence de type de constructeur ?
L'inférence de type de C# simplifie la déclaration des variables en permettant au compilateur de déduire les types à partir de l'initialisation. Cependant, cette fonctionnalité utile est absente pour les constructeurs, ce qui soulève des questions sur son omission.
L'absence d'inférence de type constructeur n'est pas en soi un défaut de conception fondamental. Il pourrait être implémenté en analysant les constructeurs disponibles, en résolvant les surcharges et en sélectionnant la « meilleure » correspondance. Le défi réside dans la complexité de comparer des constructeurs de différents types et de différents paramètres génériques.
Le principal obstacle est le compromis entre les avantages potentiels et les coûts de mise en œuvre. Bien que pratique, l’ajout de cette fonctionnalité nécessite un effort de développement substantiel. De plus, cela risque d'introduire une ambiguïté et des erreurs dans la résolution des surcharges.
Malgré cette limitation, les développeurs peuvent obtenir des résultats similaires en utilisant le modèle d'usine. Une classe d'usine dédiée gère la création d'objets, en spécifiant les types selon les besoins. Par exemple :
<code class="language-csharp">public class MyTypeFactory { public static MyType<T> Create<T>(T value) { return new MyType<T>(value); } }</code>
Cela permet l'inférence de type lors de la création d'un objet :
<code class="language-csharp">var myObj = MyTypeFactory.Create(42);</code>
L'inférence de type constructeur a été une suggestion récurrente, mais sa mise en œuvre reste en attente en raison de la priorisation d'autres fonctionnalités. Il a été brièvement envisagé pour C# 6 mais finalement exclu lors du développement.
Bien que pratique, l'absence d'inférence de type constructeur en C# découle de problèmes pratiques et de la disponibilité de solutions de contournement comme le modèle d'usine. Les développeurs doivent actuellement utiliser des déclarations de type explicites ou des stratégies alternatives pour l'initialisation des objets.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!