проверить, есть ли у объекта метод с подписью делегата - PullRequest
8 голосов
/ 28 января 2010

Как проверить, есть ли у объекта метод с такой же сигнатурой конкретного делегата

    public delegate T GetSomething<T>(int aParameter);
    public static void Method<T>(object o, GetSomething<T> gs)
    {
        //check if 'o' has a method with the signature of 'gs'
    }

Ответы [ 2 ]

7 голосов
/ 28 января 2010
// You may want to tweak the GetMethods for private, static, etc...
foreach (var method in o.GetType().GetMethods(BindingFlags.Public))
{
    var del = Delegate.CreateDelegate(gs.GetType(), method, false);
    if (del != null)
    {
        Console.WriteLine("o has a method that matches the delegate type");
    }
}
5 голосов
/ 28 января 2010

Это можно сделать, найдя все методы в типе с одинаковым типом возврата и одинаковой последовательностью типов в параметрах:

var matchingMethods = o.GetType().GetMethods().Where(mi => 
    mi.ReturnType == gs.Method.ReturnType
    && mi.GetParameters().Select(pi => pi.ParameterType)
       .SequenceEqual(gs.Method.GetParameters().Select(pi => pi.ParameterType)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...