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
DDDOriginal
2025-01-22 09:27:10257Durchsuche

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:

<code class="language-csharp">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> { }</code>

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:

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

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

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!

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