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
Freigeben: 2025-01-22 09:32:09
Original
740 Leute haben es durchsucht

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

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

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

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!

Quelle:php.cn
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