Maison > développement back-end > C++ > Comment puis-je injecter des paramètres dans des instances de constructeur génériques en C# ?

Comment puis-je injecter des paramètres dans des instances de constructeur génériques en C# ?

Barbara Streisand
Libérer: 2025-01-09 12:22:44
original
863 Les gens l'ont consulté

How Can I Inject Parameters into Generic Constructor Instances in C#?

Injecter des paramètres dans des instances de constructeur générique

Dans le cadre d'une méthode générique qui nécessite de créer une instance d'un type spécifique, la question se pose : comment pouvons-nous gérer les situations où le constructeur de ce type nécessite un paramètre ? Prenons un cas où BaseFruit possède un constructeur qui accepte un poids entier. Peut-on instancier un fruit au sein d'une méthode générique de la manière suivante :

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

Dans l'exemple fourni, on peut observer une tentative d'instancier une instance Apple avec un poids de 150. Cependant, cette approche n'est pas réalisable à moins que BaseFruit soit équipé d'un constructeur sans paramètre, permettant l'affectation ultérieure de variables membres. Malheureusement, dans des scénarios pratiques, cette approche peut s'avérer peu pratique.

Pour résoudre ce problème, nous pouvons exploiter la classe Activator, comme le montre l'exemple simplifié suivant :

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

Notez qu'en employant la contrainte new() sur T sert uniquement à garantir que le compilateur vérifie l'existence d'un constructeur public sans paramètre lors de la compilation. La classe Activator est en fin de compte responsable du processus de création de type.

Il est crucial de vérifier l'existence du constructeur spécifique que vous avez l'intention d'utiliser. En outre, il convient de se demander si une telle exigence est nécessaire, car elle peut indiquer un problème de conception de code qui pourrait être évité dans les implémentations C# actuelles.

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!

source:php.cn
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