Heim >Backend-Entwicklung >C++ >Wie rufe ich eine generische Methode mit einem laufzeitbestimmten Typargument auf?

Wie rufe ich eine generische Methode mit einem laufzeitbestimmten Typargument auf?

Linda Hamilton
Linda HamiltonOriginal
2024-12-30 15:36:09735Durchsuche

How to Call a Generic Method with a Runtime-Determined Type Argument?

Aufrufen einer generischen Methode mit einem Typargument, das nur zur Ausführungszeit bekannt ist

Problem: Dynamisches Aufrufen einer generischen Methode

Sie möchten eine generische Methode mit aufrufen ein Typargument, das erst zur Laufzeit bekannt ist. Sie haben beispielsweise eine Liste von Schnittstellen und möchten für jede Schnittstelle eine generische Methode aufrufen.

Lösung: Reflexionsbasierter dynamischer Aufruf

Da das Typargument beim Kompilieren nicht bekannt ist Derzeit können Sie den herkömmlichen Methodenaufruf nicht mit Generika verwenden. Stattdessen müssen Sie Reflektion verwenden, um die generische Methode basierend auf dem zur Laufzeit erhaltenen Typargument dynamisch aufzurufen.

So können Sie diesen Ansatz implementieren:

  1. Holen Sie sich die Generische Methode:Verwenden Sie Type.GetMethod, um die generische Methode abzurufen.
  2. Generischen Typ erstellen Argument: Verwenden Sie Type.GetTypeArguments, um den generischen Typparameter zu identifizieren. Erstellen Sie dann ein Type-Objekt, das das tatsächliche Typargument darstellt, das Sie verwenden möchten.
  3. Generische Methodeninstanz erstellen: Verwenden Sie MakeGenericMethod für die generische Methode, um eine bestimmte Instanz davon mit dem angegebenen Typ zu erstellen Argument.
  4. Generische Methode aufrufen: Schließlich verwenden Sie Invoke für die erstellte generische Methodeninstanz, um Rufen Sie es dynamisch auf.

Beispiel im Code

// Original Method
public void Method<T>() {
    // Method body
}

// Main Method
var assembly = Assembly.GetExecutingAssembly();
var interfaces = assembly.GetTypes().Where(t => t.Namespace == "MyNamespace.Interfaces");

foreach (var interfaceType in interfaces) {
    MethodInfo genericMethod = typeof(Test).GetMethod("Method");
    MethodInfo specificMethod = genericMethod.MakeGenericMethod(interfaceType);
    specificMethod.Invoke(null, null); // No arguments for this example
}

Durch die Verwendung von Reflektion können Sie mit diesem Ansatz die generische Methode mit unbekannten Typargumenten zur Laufzeit dynamisch aufrufen.

Das obige ist der detaillierte Inhalt vonWie rufe ich eine generische Methode mit einem laufzeitbestimmten Typargument auf?. 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