Heim > Backend-Entwicklung > C++ > Wie erstelle ich mithilfe von Reflection dynamisch generische C#-Objekte?

Wie erstelle ich mithilfe von Reflection dynamisch generische C#-Objekte?

DDD
Freigeben: 2025-01-22 09:27:10
Original
255 Leute haben es durchsucht

How to Dynamically Create Generic C# Objects Using Reflection?

Verwenden Sie Reflection, um dynamisch generische C#-Objekte zu erstellen

In der C#-Entwicklung ist es oft notwendig, Instanzen generischer Klassen dynamisch zu erstellen. Dies kann durch Reflexion erreicht werden. Ein häufiges Anwendungsszenario besteht darin, dass der Typ einer generischen Klasse vor der Laufzeit nicht bekannt ist und auf der Grundlage einer Zeichenfolge erstellt werden muss, die ihren vollständig qualifizierten Namen darstellt.

Um Reflektion zum dynamischen Erstellen einer generischen Klasse zu verwenden, müssen Sie die Activator.CreateInstance-Methode verwenden:

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

Der obige Beispielcode erstellt dynamisch eine Instanz von Task<Item>. Wenn der Zieltyp zur Laufzeit unbekannt ist, kann er dynamisch erstellt werden, indem der vollständig qualifizierte Name des Typs (eine Zeichenfolge) übergeben wird:

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

// 传递类型参数并创建实例
Type[] typeArgs = { typeof(Item) };
object instance = Activator.CreateInstance(specificType.MakeGenericType(typeArgs));
Nach dem Login kopieren

Mit dieser Methode können Entwickler dynamisch Instanzen generischer Klassen erstellen, ohne den spezifischen Typ zur Kompilierungszeit zu kennen. Dies ist besonders nützlich in Szenarien wie dem Ableiten von Typen aus Konfigurationsdateien oder der datengesteuerten Programmierung.

Das obige ist der detaillierte Inhalt vonWie erstelle ich mithilfe von Reflection dynamisch generische C#-Objekte?. 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