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

Wie kann ich mithilfe von Reflection dynamisch generische Objekte in C# erstellen?

DDD
DDDOriginal
2025-01-22 09:32:09741Durchsuche

How Can I Dynamically Create Generic Objects in C# Using Reflection?

Verwenden Sie Reflektion, um generische Objekte in C# dynamisch zu erstellen

In C# stoßen wir häufig auf Situationen, in denen wir Objekte basierend auf Typzeichenfolgen dynamisch erstellen müssen. Dieser Ansatz verwendet Reflektion, um explizite Typdeklarationen zu vermeiden.

Bedenken Sie die folgende Klassenstruktur:

<code class="language-csharp">public class Item
{ }

public class Task<T>
{ }

public class TaskA<T> : Task<T>
{ }

public class TaskB<T> : Task<T>
{ }</code>

Unser Ziel ist es, mithilfe von Reflektion dynamisch eine Instanz von TaskA oder TaskB zu erstellen. Da der Typ nicht im Voraus bekannt ist, verlassen wir uns auf die Typzeichenfolge, z. B. „namespace.TaskA“ oder „namespace.TaskAB“.

Durch Reflexion können wir es wie folgt erreichen:

<code class="language-csharp">var type = Type.GetType("namespace.TaskA`1"); // 将“namespace”替换为您实际的命名空间
Type[] typeArgs = { typeof(Item) };
var makeme = type.MakeGenericType(typeArgs);
object instance = Activator.CreateInstance(makeme);</code>

Diese Methode erstellt dynamisch eine Instanz von TaskA basierend auf der angegebenen Typzeichenfolge. Wenn eine generische Klasse mehrere Typen akzeptiert, achten Sie darauf, beim Weglassen des Typnamens das Komma einzufügen, wie im folgenden Beispiel:

<code class="language-csharp">Type type = typeof(IReadOnlyDictionary);</code>

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