2010-02-08 10 views
8

Wie kann ich feststellen, ob eine MethodInfo zu einem bestimmten Delegatentyp passt?Überprüfen einer MethodInfo für einen Delegaten

bool IsMyDelegate(MethodInfo method); 

Edit: Ich bin ein Objekt Method gegeben und wollen wissen, ob es die Delegierten-Schnittstelle passt. von Apart dem offensichtlichen

private bool IsValidationDelegate(MethodInfo method) 
    { 
     var result = false; 
     var parameters = method.GetParameters(); 
     if (parameters.Length == 2 && 
      parameters[0].ParameterType == typeof(MyObject1) && 
      parameters[1].ParameterType == typeof(MyObject2) && 
      method.ReturnType == typeof(bool)) 
     { 
      result = true; 
     } 
     else 
     { 
      m_Log.Error("Validator:IsValidationDelegate", "Method [...] is not a ValidationDelegate."); 
     } 
     return result; 
    } 
+0

Können Sie bitte Ihre Frage umformulieren. Es ist nicht klar, was du wissen willst. – Steven

+0

hilft das? –

+0

Fragen Sie nach Kompilierzeitunterstützung? – Steven

Antwort

11

Wenn method eine statische Methode ist:

bool isMyDelegate = 
    (Delegate.CreateDelegate(typeof(MyDelegate), method, false) != null); 

Wenn method eine Instanzmethode ist:

bool isMyDelegate = 
    (Delegate.CreateDelegate(typeof(MyDelegate), someObj, method, false) != null) 

(Leider Sie eine Instanz in diesem Fall brauchen, weil Delegate.CreateDelegate wird versuchen, eine Delegat-Instanz zu binden, obwohl in diesem Fall alle uns darum kümmern, ob der DelegatKann in beiden Fällen der Trick sein, .NET zu bitten, einen Delegaten des gewünschten Typs aus der MethodInfo zu erstellen, aber NULL zurückzugeben, anstatt eine Ausnahme auszulösen, wenn die Methode dies getan hat die falsche Signatur. Dann testet man gegen Null, ob der Delegierte die richtige Signatur hat oder nicht.

Beachten Sie, dass, weil dies tatsächlich versucht, den Delegaten zu erstellen, es auch alle Delegat Varianzregeln für Sie behandelt (z. B. wenn die Methode Rückgabetyp kompatibel ist, aber nicht genau das gleiche wie die Delegate Rückgabetyp).

+0

schön. Danke, genau was ich brauchte. –

Verwandte Themen