2009-01-09 12 views
49

Gibt es eine einfache Möglichkeit, die Reflektion zu verwenden, um die Parameterliste für einen Delegaten zu erhalten, wenn Sie seine Typinformationen haben?Kann ich die Signatur eines C# -Delegaten nach Typ abrufen?

Ein Beispiel, wenn ich einen Delegattyp wie folgt deklarieren

delegate double FooDelegate (string param, bool condition); 

und später die Typinformationen für die Delegattyp bekommen als

Type delegateType = typeof(FooDelegate); 

folgt Ist es möglich, den Rückgabetyp abrufen (double) und Parameterliste ({string, bool}) von diesem Typ info Objekt?

Antwort

90
MethodInfo method = delegateType.GetMethod("Invoke"); 
    Console.WriteLine(method.ReturnType.Name + " (ret)"); 
    foreach (ParameterInfo param in method.GetParameters()) { 
     Console.WriteLine("{0} {1}", param.ParameterType.Name, param.Name); 
    } 
+7

Perfekt! Der Grund dafür ist, dass die Deklaration des Delegaten im Grunde Syntaxzucker ist, um eine von Delegate abgeleitete Klasse mit einer neuen Invoke-Methode zu deklarieren, die die angegebenen Parameter annimmt. Danke für die Hilfe. – fastcall

Verwandte Themen