Maison >développement back-end >C++ >L'instanciation de type générique peut-elle gérer les arguments du constructeur en C# ?
Instanciation de type générique C# et paramètres de constructeur
Lors de la construction d'un type générique, une question courante est la suivante : comment instancier un constructeur qui nécessite des paramètres dans une méthode générique ? Par exemple, la classe BaseFruit
a un constructeur qui reçoit un paramètre de poids de type entier.
Comment instancier des fruits avec un poids spécifié dans une méthode générique ?
Le code suivant tente de créer une instance de fruit avec un poids spécifié dans une méthode générique :
<code class="language-csharp">public void AddFruit<T>() where T : BaseFruit { BaseFruit fruit = new T(weight); /*new Apple(150);*/ fruit.Enlist(fruitManager); }</code>
Cette approche n'est possible que si BaseFruit
dispose d'un constructeur sans paramètre qui modifie ensuite les propriétés via les variables membres. Cependant, dans des applications réelles, cela peut ne pas être pratique.
Alternative :
peut utiliser la classe Activator
:
<code class="language-csharp">return (T)Activator.CreateInstance(typeof(T), new object[] { weight });</code>
Dans ce cas, la contrainte T
sur new()
garantit qu'un constructeur public sans paramètre existe au moment de la compilation, et la classe Activator
est responsable de la création réelle du type.
Remarque :
Bien que ce scénario fournisse une solution de contournement, l'existence du constructeur spécifique doit être vérifiée dans le code. De plus, s'appuyer sur cette approche peut indiquer un problème au niveau du code et doit être évité dans les versions actuelles de C#.
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!