Maison > développement back-end > C++ > Comment puis-je instancier des types génériques avec des constructeurs paramétrés en C# ?

Comment puis-je instancier des types génériques avec des constructeurs paramétrés en C# ?

Susan Sarandon
Libérer: 2025-01-09 12:27:49
original
924 Les gens l'ont consulté

Types génériques C# et instanciation de constructeurs paramétrés

Supposons que vous disposiez d'une méthode générique qui accepte un type générique et que vous souhaitiez instancier une instance de ce type avec des paramètres de constructeur spécifiques. Cependant, le constructeur du type nécessite un paramètre et vous ne savez pas si vous pouvez le faire.

L'extrait de code suivant illustre une tentative de création d'un objet fruit 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>
Copier après la connexion

Cette approche peut échouer car BaseFruit n'a pas de constructeur sans paramètre. Il faut un paramètre entier pour préciser le poids du fruit.

Pour résoudre ce problème, C# fournit la classe Activator. Vous pouvez créer une instance d'un type en utilisant la méthode Activator.CreateInstance et passer un tableau d'objets comme argument constructeur :

<code class="language-csharp">return (T)Activator.CreateInstance(typeof(T), new object[] { weight });</code>
Copier après la connexion

Notez que l'utilisation de la contrainte T sur new() garantit uniquement que le compilateur vérifie les constructeurs publics sans paramètre au moment de la compilation. Le code réel utilisé pour créer le type est géré par la classe Activator.

Bien que cette approche vous permette d'instancier un type avec un constructeur paramétré, vous devez vous assurer que le constructeur spécifique est présent dans la définition du type. S'appuyer sur cette approche peut indiquer des odeurs de code potentielles et suggérer que vous devriez explorer d'autres options de conception.

How Can I Instantiate Generic Types with Parameterized Constructors in 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!

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