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
Libérer: 2025-01-09 12:11:42
original
196 Les gens l'ont consulté

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 :

public void AddFruit<T>() where T : BaseFruit
{
    BaseFruit fruit = new T(weight); /*new Apple(150);*/
    fruit.Enlist(fruitManager);
}
Copier après la connexion

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 :

return (T)Activator.CreateInstance(typeof(T), new object[] { weight });
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal