Можно ли передать произвольную группу методов в качестве параметра метода?
Я хотел бы написать функцию, подобную следующей
// The type 'MethodGroup' below doesn't exist. This is fantasy-code.
public void MyFunction(MethodGroup g)
{
// do something with the method group
}
Позже я мог позвонитьMyFunction
слюбой метод группы. Что-то вроде этого.
MyFunction(Object.Equals)
Если я сделаю подпись, все будет хорошо.
public void MyFunction(Func f)
{
// do something with known delegate
}
...
MyFunction(Object.Equals)
Группа методовObject.Equals
счастливо приведен в известный тип делегатаFunc
но я неЯ не хочу фиксировать определенную подпись. Я'Я хотел бы передать любую группу методов.MyFunction
Группы методов не могут быть преобразованы вSystem.Object
public void MyFunction(object o)
{
// do something with o
}
...
MyFunction(Object.Equals) // doesn't work
Я думаю, что всеs забыли скобки при вызове метода и обнаружили это в какой-то момент. Я'Я надеюсь, что это нене означает, что группы методов нет (или может 'не должно быть преобразовано) в объекты первого класса.
Я неНе думаю, что выражения Linq дадут вид общности, которую яищу, но я наверняка что-то упустил.
Я должен также упомянуть, что было бы хорошо, если бы группа методов содержала перегрузки, при условии, что у меня есть способ проверить группу методов.
Что бы я сделал с группой методов? Я мог бы распечатать все сигнатуры всех методов в группе (перегрузки, методы расширения и т. Д.), Или я мог 'вызвать» группа с некоторыми аргументами (если возможно, разрешите корректную перегрузку в группе). Есть и другие способы сделать эти вещи, но это те вещи, которые вы, возможно, захотите сделать с группой методов.
Как уже упоминали несколько человек, я могу принятьDelegate
и приведение к конкретному известному типу делегата при вызове.MyFunction
public void MyFunction(Delegate d)
{
// do something with d
}
...
MyFunction((Func)Object.Equals)
Но это неЭто почти то же самое, что и прохождение всей группы методов. Это выбирает один метод из группы и преобразует его в конкретного делегата. Мне бы очень хотелось передать всю группу за один выстрел.