Heim > Backend-Entwicklung > C++ > Können generische Klassen mit runtendbestimmten Typparametern instanziiert werden?

Können generische Klassen mit runtendbestimmten Typparametern instanziiert werden?

DDD
Freigeben: 2025-02-01 12:31:10
Original
728 Leute haben es durchsucht

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

Laufzeit -Instanziierung generischer Klassen

In diesem Artikel wird die Herausforderung untersucht, eine generische Klasse mit einem zum Laufzeit festgelegten Typparameter zu instanziieren. Die direkte Verwendung einer runtend festgelegten Type als generischer Typparameter ist aufgrund von Kompilierungszeitbeschränkungen unmöglich. Der Compiler benötigt den Betontyp zur Kompilierungszeit.

versucht dies direkt, wie unten gezeigt, zu einem Compiler -Fehler:

string typeName = "<read type name somewhere>"; // Runtime type name
Type myType = Type.GetType(typeName);

MyGenericClass<myType> myGenericClass = new MyGenericClass<myType>(); // Compiler error
Nach dem Login kopieren

Die Lösung beinhaltet die Nutzung der Reflexion. Das folgende Beispiel zeigt dies:

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);
    }
}
Nach dem Login kopieren

Der entscheidende Schritt besteht darin, Type.MakeGenericType() zu verwenden. Diese Methode erstellt dynamisch einen neuen Typ, der eine generische Instanz von Generic<T> darstellt, die T durch die Laufzeit typeArgument ersetzt. Activator.CreateInstance() dann instanziiert dieser neu konstruierte Typ. Beachten Sie die Verwendung von Generic<>, um den geöffneten generischen Typ anzugeben.

Das obige ist der detaillierte Inhalt vonKönnen generische Klassen mit runtendbestimmten Typparametern instanziiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage