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

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

DDD
DDDoriginal
2025-01-22 09:32:09744parcourir

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

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

En C#, nous rencontrons souvent des situations où nous devons créer dynamiquement des objets basés sur des chaînes de types. Cette approche utilise la réflexion pour éviter les déclarations de type explicites.

Considérez la structure de 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>

Notre objectif est d'utiliser la réflexion pour créer dynamiquement une instance de TaskA ou TaskB. Comme le type n'est pas connu à l'avance, nous nous appuierons sur la chaîne de type, telle que "namespace.TaskA" ou "namespace.TaskAB".

En utilisant la réflexion, nous pouvons y parvenir comme suit :

<code class="language-csharp">var type = Type.GetType("namespace.TaskA`1"); // 将“namespace”替换为您实际的命名空间
Type[] typeArgs = { typeof(Item) };
var makeme = type.MakeGenericType(typeArgs);
object instance = Activator.CreateInstance(makeme);</code>

Cette méthode crée dynamiquement une instance de TaskA basée sur la chaîne de type spécifiée. Si une classe générique accepte plusieurs types, veillez à inclure la virgule lorsque vous omettez le nom du type, comme dans l'exemple suivant :

<code class="language-csharp">Type type = typeof(IReadOnlyDictionary);</code>

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:
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