Heim > Backend-Entwicklung > C++ > Wie kann ich generische Methoden mit laufzeitbestimmten Typen aufrufen?

Wie kann ich generische Methoden mit laufzeitbestimmten Typen aufrufen?

Linda Hamilton
Freigeben: 2024-12-30 14:53:16
Original
1006 Leute haben es durchsucht

How Can I Call Generic Methods with Runtime-Determined Types?

Aufrufen generischer Methoden mit zur Laufzeit bestimmten Typen

Dieses Problem tritt auf, wenn versucht wird, eine generische Methode mit einem zur Kompilierungszeit unbekannten Typparameter aufzurufen . Gewöhnliche Methodenaufrufe basieren auf Typsicherheitsprüfungen, die vom Compiler durchgeführt werden. Wenn der Typ jedoch nur zur Laufzeit verfügbar ist, sind alternative Ansätze erforderlich.

Reflexionsbasierte Lösung

Im Kontext des bereitgestellten Codebeispiels:

public void Method<T>() where T : class {}
public void AnotherMethod()
{
    ...
    foreach (var interface in interfaces)
    {
        Method<interface>(); // Compile error!
    }
}
Nach dem Login kopieren

Um den Typ zur Kompilierungszeit zu umgehen Überprüfung:

  1. Rufen Sie die offene generische Methode mit Type.GetMethod ab:

    MethodInfo method = typeof(Test).GetMethod("Method");
    Nach dem Login kopieren
  2. Machen Sie die Methode generisch mit MakeGenericMethod:

    MethodInfo genericMethod = method.MakeGenericMethod(interface);
    Nach dem Login kopieren
  3. Rufen Sie die Methode mit Invoke auf:

    genericMethod.Invoke(null, null); // No target or arguments in this case
    Nach dem Login kopieren

Vollständiges Beispiel

Um den Prozess zu verdeutlichen, berücksichtigen Sie dieses überarbeitete Codebeispiel:

using System;
using System.Linq;
using System.Reflection;

namespace Sample
{
    interface IFoo { }
    interface IBar { }

    class Program
    {
        public static void CallMe<T>()
        {
            Console.WriteLine("Type of T: {0}", typeof(T));
        }

        static void Main()
        {
            var types = typeof(Program).Assembly.GetTypes().Where(t => t.Namespace == "Sample");

            var methodInfo = typeof(Program).GetMethod("CallMe");

            foreach (var type in types)
            {
                var genericMethodInfo = methodInfo.MakeGenericMethod(type);
                genericMethodInfo.Invoke(null, null);
            }
        }
    }
}
Nach dem Login kopieren

In diesem Beispiel wird die generische CallMe-Methode dynamisch basierend auf den im Beispiel-Namespace gefundenen Typen aufgerufen.

Das obige ist der detaillierte Inhalt vonWie kann ich generische Methoden mit laufzeitbestimmten Typen aufrufen?. 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