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

Können generische Klassen mit runtendbestimmten Typparametern instanziiert werden?

DDD
DDDOriginal
2025-02-01 12:31:10730Durchsuche

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:

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

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

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

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!

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