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

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

DDD
Libérer: 2025-01-22 09:27:10
original
255 Les gens l'ont consulté

How to Dynamically Create Generic C# Objects Using Reflection?

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

En développement C#, il est souvent nécessaire de créer dynamiquement des instances de classes génériques. Ceci peut être réalisé par la réflexion. Un scénario d'application courant est que le type d'une classe générique n'est pas connu avant l'exécution et doit être créé sur la base d'une chaîne représentant son nom complet.

Pour utiliser la réflexion pour créer dynamiquement une classe générique, vous devez utiliser la méthode Activator.CreateInstance :

using System;
using System.Reflection;

public class MainClass
{
    public static void Main(string[] args)
    {
        // 获取泛型类型定义
        Type genericType = typeof(Task<>);

        // 构建泛型类型的类型参数
        Type[] typeArgs = { typeof(Item) };

        // 创建具体的泛型类型
        Type specificType = genericType.MakeGenericType(typeArgs);

        // 创建具体类型的实例
        object instance = Activator.CreateInstance(specificType);
    }
}


public class Item { }

public class Task<T> { }

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

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

L'exemple de code ci-dessus construit dynamiquement une instance de Task<Item>. Si le type cible est inconnu au moment de l'exécution, il peut être construit dynamiquement en passant le nom complet du type (une chaîne) :

// 使用字符串表示获取类型
Type specificType = Type.GetType("namespace.TaskA`1"); // 注意 `1` 表示泛型参数个数

// 传递类型参数并创建实例
Type[] typeArgs = { typeof(Item) };
object instance = Activator.CreateInstance(specificType.MakeGenericType(typeArgs));
Copier après la connexion

Cette méthode permet aux développeurs de créer dynamiquement des instances de classes génériques sans connaître le type spécifique au moment de la compilation. Ceci est particulièrement utile dans des scénarios tels que la déduction de types à partir de fichiers de configuration ou la programmation basée sur les données.

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 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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal