Heim > Backend-Entwicklung > C++ > Wie kann ich mithilfe von Reflection generische C#-Objekte mit dynamischer Typspezifikation erstellen?

Wie kann ich mithilfe von Reflection generische C#-Objekte mit dynamischer Typspezifikation erstellen?

Mary-Kate Olsen
Freigeben: 2025-01-22 09:41:08
Original
949 Leute haben es durchsucht

How Can I Create Generic C# Objects with Dynamic Type Specification Using Reflection?

Verwenden Sie Reflection, um generische C#-Objekte mit dynamischer Typspezifikation zu erstellen

In C# müssen Sie möglicherweise dynamisch ein generisches Objekt erstellen, z. B. eine Instanz der Task-Klasse, bei der der Typ T vorher nicht bekannt ist. Sie können die Activator.CreateInstance-Methode in Verbindung mit der C#-Reflektion verwenden, um dieses Problem zu lösen.

Um dynamisch ein generisches TaskA- oder TaskB-Objekt zu erstellen, führen Sie die folgenden Schritte aus:

  1. Bestimmen Sie den generischen Klassentyp: Verwenden Sie Type.GetType(), um die Typinformationen der generischen Klasse abzurufen, z. B. „namespace.TaskA“ oder „namespace.TaskB“.
  2. Generische Typparameter angeben: Bestimmen Sie die Typparameter der generischen Klasse, z. B. typeof(Item).
  3. Erstellen Sie einen generischen Typ: Verwenden Sie MakeGenericType, um einen bestimmten generischen Typ für einen generischen Klassentyp zu erstellen, zum Beispiel makeme = d1.MakeGenericType(typeArgs).
  4. Erstellen Sie eine Instanz: Verwenden Sie Activator.CreateInstance, um eine Instanz eines dynamisch generierten generischen Typs zu erstellen, zum Beispiel object o = Activator.CreateInstance(makeme).

Zum Beispiel:

<code class="language-csharp">Type d1 = Type.GetType("namespace.TaskA`1");
Type[] typeArgs = { typeof(Item) };
var makeme = d1.MakeGenericType(typeArgs);
object o = Activator.CreateInstance(makeme);</code>
Nach dem Login kopieren

Wenn eine generische Klasse mehrere Typparameter akzeptiert, achten Sie darauf, beim Weglassen des Typnamens ein Komma einzufügen, zum Beispiel:

<code class="language-csharp">Type type = typeof(IReadOnlyDictionary<,>); </code>
Nach dem Login kopieren

Hinweis: Im Codebeispiel wird davon ausgegangen, dass „namespace.TaskA1" 和Item是已定义的类型。 实际应用中,需要根据您的具体项目替换这些占位符。 此外,错误处理(例如,处理Type.GetType()` null zurückgibt) in einer Produktionsumgebung von entscheidender Bedeutung ist.

Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von Reflection generische C#-Objekte mit dynamischer Typspezifikation 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage