2017-02-24 6 views
0

Ceci est la fonction qui vérifie qui doit être lié délégué à la méthode: Description is hereLorsque la méthode est appelée sélection qui délèguent est bon pour elle

private static bool IsEquivalent(Delegate d, MethodInfo method) 
{ 
    var dm = d.Method; 
    if (!method.ReturnType.IsAssignableFrom(dm.ReturnType)) 
     return false; 
    var parameters = method.GetParameters(); 
    var dp = dm.GetParameters(); 
    if (parameters.Length != dp.Length) 
     return false; 
    for (int i = 0; i < parameters.Length; i++) 
    { 
     //BUG: does not take into account modifiers (like out, ref...) 
     if (!parameters[i].ParameterType.IsAssignableFrom(dp[i].ParameterType)) 
      return false; 
    } 
    return true; 

}

Ici, il vérifie que le type de retour de la méthode et Le type de paramètre de méthode est le même que celui de la fonction, pointé par délégué. Mais que se passerait-il s'il y aurait plus d'une fonction avec les mêmes types de paramètres? Comment pouvons-nous traiter dans ce cas? Est-il possible de lire le nom de la fonction, que certains délégué le désigne?

Répondre

0

Les délégués n'ont actuellement pas de propriété de nom. La meilleure façon que j'ai prise dans mon adoption de ce code dans mon projet, est d'avoir une classe qui contient les délégués passés comme méthodes. De cette façon, vous pouvez passer une instance de cette classe à la place de tous les paramètres délégués et comparer le nom des méthodes de la classe avec le nom de la méthode d'appel.