Maison >développement back-end >C++ >L'instanciation de type générique peut-elle gérer les arguments du constructeur en C# ?

L'instanciation de type générique peut-elle gérer les arguments du constructeur en C# ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-09 12:11:42179parcourir

Can Generic Type Instantiation Handle Constructor Arguments in 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn