Maison > développement back-end > C++ > Les classes génériques peuvent-elles être instanciées avec des paramètres de type déterminés d'exécution?

Les classes génériques peuvent-elles être instanciées avec des paramètres de type déterminés d'exécution?

DDD
Libérer: 2025-02-01 12:31:10
original
677 Les gens l'ont consulté

Can Generic Classes Be Instantiated with Runtime-Determined Type Parameters?

Instanciation d'exécution des classes génériques

Cet article explore le défi d'instanciation d'une classe générique avec un paramètre de type déterminé à l'exécution. L'utilisation directe d'une variable déterminée Type d'exécution comme paramètre de type générique est impossible en raison des contraintes de temps de compilation. Le compilateur a besoin du type de béton au moment de la compilation.

Tenter cela directement, comme indiqué ci-dessous, se traduit par une erreur du compilateur:

<code class="language-csharp">string typeName = "<read type name somewhere>"; // Runtime type name
Type myType = Type.GetType(typeName);

MyGenericClass<myType> myGenericClass = new MyGenericClass<myType>(); // Compiler error</code>
Copier après la connexion

La solution consiste à tirer parti de la réflexion. L'exemple suivant le démontre:

<code class="language-csharp">using System;
using System.Reflection;

public class Generic<T>
{
    public Generic()
    {
        Console.WriteLine($"T={typeof(T)}");
    }
}

class Test
{
    static void Main()
    {
        string typeName = "System.String";
        Type typeArgument = Type.GetType(typeName);

        Type genericClass = typeof(Generic<>); // Note the <> here
        Type constructedClass = genericClass.MakeGenericType(typeArgument);

        object created = Activator.CreateInstance(constructedClass);
    }
}</code>
Copier après la connexion

L'étape cruciale consiste à utiliser Type.MakeGenericType(). Cette méthode crée dynamiquement un nouveau type représentant une instance générique de Generic<T>, substituant T avec le runtime typeArgument. Activator.CreateInstance() Instancie ensuite ce type nouvellement construit. Notez l'utilisation de Generic<> pour spécifier le type générique ouvert.

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