2010-02-08 3 views
8

Comment puis-je déterminer si un objet MethodInfo correspond à un type de délégué distinct?Vérification d'un MethodInfo par rapport à un délégué

bool IsMyDelegate(MethodInfo method); 

Edit: Je me donne un objet MethodInfo et que vous souhaitez savoir si elle correspond à l'interface délégué. En dehors de l'évidence

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

Pouvez-vous reformuler votre question? Ce n'est pas clair ce que vous voulez savoir. – Steven

+0

cela aide-t-il? –

+0

Demandez-vous un support de compilation? – Steven

Répondre

11

Si method est une méthode statique:

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

Si method est une méthode d'instance:

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

(Malheureusement, vous avez besoin d'une instance dans ce cas parce que Delegate.CreateDelegate va essayer de lier une instance de délégué, même si dans ce cas tout ce qui nous intéresse, que ce soit le déléguéDans les deux cas, l'astuce consiste essentiellement à demander à .NET de créer un délégué du type souhaité à partir de MethodInfo, mais de renvoyer null plutôt que de lancer une exception si la méthode a été activée. la mauvaise signature. Ensuite, le test sur null nous indique si le délégué a la bonne signature ou non. Notez que, comme cela tente réellement de créer le délégué, il gérera également toutes les règles de variance de délégué pour vous (par exemple, lorsque le type de retour de méthode est compatible mais pas exactement le même que le type de retour délégué).

+0

bien. merci, exactement ce dont j'avais besoin. –

Questions connexes