2010-01-28 15 views

Odpowiedz

5

można to zrobić poprzez umieszczenie wszystkich metod w typ mający ten sam typ zwrotu i tę samą sekwencję typów w parametrach:

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))); 
+0

to działa. ponadto czy możliwe jest sprawdzenie, czy "gs" jest delegatem do "o"? – Fabiano

+1

@Fabiano: tak, poprzez 'gs.Target':' if (gs.Target == o) {/ * gs reprezentuje metodę w instancji o * /} ' –

+0

Dzięki. Właśnie dowiedziałem się, że druga odpowiedź będzie wystarczająca dla mojej sprawy :-) – Fabiano

7
// 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"); 
    } 
} 
+0

To nie działa. Czy jest możliwe, że Delegate.CreateDelegate działa tylko dla metod statycznych? – Fabiano

+1

Na przykład metody należy użyć innego podpisu, przekazując odwołanie do instancji: 'Delegate.CreateDelegate (gs.GetType(), o, metoda, fałsz);' – torvin

Powiązane problemy