Maison > développement back-end > C++ > Comment puis-je créer dynamiquement des objets C# génériques à l'aide de Reflection ?

Comment puis-je créer dynamiquement des objets C# génériques à l'aide de Reflection ?

Barbara Streisand
Libérer: 2025-01-22 09:47:09
original
434 Les gens l'ont consulté

How Can I Dynamically Create Generic C# Objects Using Reflection?

Utilisez la réflexion pour créer dynamiquement des objets C# génériques

En développement C#, il est souvent nécessaire de créer dynamiquement des objets génériques. Cela crée des défis puisque les informations sur le type ne sont pas toujours disponibles. Cet article explorera comment résoudre ce problème en utilisant la réflexion et la méthode Activator.CreateInstance.

Supposons que nous ayons la classe suivante :

<code class="language-csharp">public class Item { }

public class Task<T> { }

public class TaskA<T> : Task<T> { }

public class TaskB<T> : Task<T> { }</code>
Copier après la connexion

Notre objectif est de créer dynamiquement une instance de TaskA ou TaskB basée sur une chaîne représentant son nom de type complet (par exemple, "namespace.TaskA" ou "namespace.TaskB").

La solution peut être obtenue en suivant ces étapes :

  1. Obtient le type de base (Task<T>).
  2. Définit le paramètre de type à fournir sous forme de tableau (par exemple, new Type[] { typeof(Item) }).
  3. Utilisez Type.MakeGenericType pour générer un type spécifique (TaskA ou TaskB).
  4. Utilisez Activator.CreateInstance pour instancier des objets génériques.

Par exemple, créez un TaskA<Item> objet en utilisant la réflexion :

<code class="language-csharp">var taskType = typeof(Task);
Type[] typeArgs = { typeof(Item) };
var makeme = taskType.MakeGenericType(typeArgs);
object o = Activator.CreateInstance(makeme);</code>
Copier après la connexion

Si le nom du type est spécifié sous forme de chaîne, vous pouvez utiliser la méthode suivante :

<code class="language-csharp">var taskType = Type.GetType("namespace.TaskA`1"); //注意`1`表示泛型参数个数
Type[] typeArgs = { typeof(Item) };
var makeme = taskType.MakeGenericType(typeArgs);
object o = Activator.CreateInstance(makeme);</code>
Copier après la connexion

Cette technologie permet l'instanciation dynamique d'objets génériques basés sur des noms de types, offrant ainsi une solution flexible et puissante pour gérer les types génériques inconnus au moment de l'exécution. Notez que la méthode Type.GetType nécessite des informations complètes sur l'espace de noms et que le TaskA après le 1 indique que la classe générique a un paramètre de type.

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