Maison > développement back-end > C++ > Comment puis-je transmettre des arguments à un constructeur lors de l'instanciation d'un type générique en C# ?

Comment puis-je transmettre des arguments à un constructeur lors de l'instanciation d'un type générique en C# ?

Susan Sarandon
Libérer: 2025-01-22 13:46:10
original
306 Les gens l'ont consulté

How Can I Pass Arguments to a Constructor When Instantiating a Generic Type in C#?

Passer des arguments de constructeur à des types génériques en C#

La création d'instances de types génériques avec des constructeurs paramétrés en C# peut présenter des défis. Toute tentative d'instanciation directe entraîne souvent l'erreur : « impossible de fournir des arguments lors de la création d'une instance d'une variable ». En effet, le compilateur ne connaît pas la signature spécifique du constructeur au moment de la compilation.

La contrainte new() autorise uniquement les constructeurs sans paramètre. Pour gérer les constructeurs avec des arguments, une solution courante consiste à utiliser une méthode de fabrique (souvent représentée par un délégué).

Voici comment y parvenir :

Au lieu d'instancier directement le type générique, transmettez un délégué (par exemple, un Func) à votre méthode générique. Ce délégué agira comme une usine, chargée de créer l'objet avec les arguments constructeur nécessaires.

Exemple :

<code class="language-csharp">public static string GetAllItems<T>(..., Func<ListItem, T> factoryMethod) {
  // ...
  List<T> tabListItems = new List<T>();
  foreach (ListItem listItem in listCollection) 
  {
    tabListItems.Add(factoryMethod(listItem));
  }
  // ...
}</code>
Copier après la connexion

Cette GetAllItems méthode accepte désormais un Func<ListItem, T> délégué. Ce délégué prend un ListItem en entrée et renvoie une instance de type T.

Utilisation :

<code class="language-csharp">GetAllItems<Foo>(..., l => new Foo(l)); </code>
Copier après la connexion

Dans cet exemple, l'expression lambda l => new Foo(l) sert de méthode d'usine. Il prend un ListItem (l) et l'utilise pour créer un nouvel objet Foo à l'aide du constructeur de Foo. Cela transmet effectivement l'argument ListItem au constructeur Foo.

Cette approche permet une instanciation flexible de types génériques, même ceux avec des constructeurs paramétrés, en séparant la logique de création d'objet de la méthode générique elle-même.

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