Czy jest możliwe przekazanie dowolnej grupy metod jako parametru do metody?

Chciałbym napisać funkcję jak poniżej

// The type 'MethodGroup' below doesn't exist.  This is fantasy-code.
public void MyFunction(MethodGroup g)
{
    // do something with the method group
}

Później mogłem zadzwonićMyFunction zkażdy grupa metod. Coś takiego.

MyFunction(Object.Equals)

Jeśli zobowiążę się do podpisu, wszystko będzie działać.

public void MyFunction(Func<object, object, bool> f)
{
    // do something with known delegate
}
...
MyFunction(Object.Equals)

Grupa metodObject.Equals jest szczęśliwie wymuszony na znanym typie delegataFunc<object, object, bool>, ale nie chcę się podpisywać. Chciałbym przekazać dowolną grupę metod doMyFunction.

Nie można przekształcić grup metod naSystem.Object

public void MyFunction(object o)
{
    // do something with o
}
...
MyFunction(Object.Equals) // doesn't work

Myślę, że wszyscy zapomnieli o nawiasach klamrowych w wywołaniu metody i odkryli to w pewnym momencie. Mam nadzieję, że nie oznacza to, że grupy metod nie są (lub nie mogą być konwertowane) na obiekty pierwszej klasy.

Nie sądzę, aby wyrażenia Linq dały rodzaj ogólności, której szukam, ale z pewnością mógłbym czegoś przegapić.

Powinienem również wspomnieć, że byłoby dobrze, gdyby grupa metod zawierała przeciążenia, pod warunkiem, że mam sposób sprawdzania grupy metod.

Co bym zrobił z grupą metod? Mógłbym wydrukować wszystkie podpisy wszystkich metod w grupie (przeciążenia, metody rozszerzeń itp.) Lub mogłem „wywołać” grupę z pewnymi argumentami (jeśli to możliwe, rozstrzygnąć poprawne przeciążenie w grupie). Są inne sposoby na zrobienie tych rzeczy, ale są pewne rzeczy, które możesz chcieć zrobić z grupą metod.

Jak wspomniało kilka osób, mogę zaakceptowaćDelegatei rzucam do określonego znanego typu delegata, gdy dzwonięMyFunction.

public void MyFunction(Delegate d)
{
    // do something with d
}
...
MyFunction((Func<object, object, bool>)Object.Equals)

Ale to nie to samo, co przekazanie całej grupy metod. Wybiera jedną metodę z grupy i konwertuje ją do konkretnego delegata. Naprawdę chciałbym przekazać całą grupę jednym strzałem.

questionAnswers(4)

yourAnswerToTheQuestion