Maison > développement back-end > C++ > Puis-je passer un système System Instancié comme paramètre de type générique en C #?

Puis-je passer un système System Instancié comme paramètre de type générique en C #?

DDD
Libérer: 2025-02-01 12:16:11
original
232 Les gens l'ont consulté

Can I Pass an Instantiated System.Type as a Generic Type Parameter in C#?

Passez un système instancié.Type en tant que paramètre de type pour une classe générique

La question se concentre sur la faisabilité de la construction d'une classe générique avec une instance de type instanciée. Plus précisément, peut-on créer une instance de MyGenericClass & lt; myType & gt; Où MyType est déterminé dynamiquement?

L'approche directe résulte de l'erreur du compilateur "Le type ou l'espace de noms" myType "n'a pas pu être trouvé." Pour surmonter cette limitation, la réflexion offre une solution.

En utilisant la réflexion, on peut créer dynamiquement un type compatible avec le paramètre de type de la classe générique. Voici un exemple:

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

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

        Type genericClass = typeof(Generic<>);
        // MakeGenericType is badly named
        Type constructedClass = genericClass.MakeGenericType(typeArgument);

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

Notez que bien que l'exemple utilise un paramètre de type unique, plusieurs paramètres sont pris en charge. Pour omettre un paramètre de type pour une classe générique avec plusieurs paramètres, incluez des virgules dans les espaces réservés, comme le montre l'exemple suivant:

Type genericClass = typeof(IReadOnlyDictionary<>, <>);
Type constructedClass = genericClass.MakeGenericType(typeArgument1, typeArgument2);
Copier après la connexion

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