Я хотел бы написать функцию, подобную следующей
// 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<object, object, bool> f)
{
// do something with known delegate
}
...
MyFunction(Object.Equals)
Группа методов Object.Equals
счастливо принуждается к известному типу делегата Func<object, object, bool>
, но я не хочу фиксировать конкретную подпись. Я хотел бы передать любую группу методов в MyFunction
.
Группы методов не могут быть преобразованы в System.Object
public void MyFunction(object o)
{
// do something with o
}
...
MyFunction(Object.Equals) // doesn't work
Я думаю, что все забытые фигурные скобки на вызове метода и обнаружили это в какой-то момент. Я надеюсь, что это не означает, что группы методов не (или не могут быть преобразованы) в объекты первого класса.
Я не думаю, что выражения Linq дадут вид общности, которую я ищу, но я, конечно, мог бы что-то упустить.
Я также должен отметить, что было бы хорошо, если бы группа методов содержала перегрузки, если у меня есть способ проверки группы методов.
Что мне делать с группой методов? Я мог бы распечатать все подписи всех методов в группе (перегрузки, методы расширения и т.д.), или я мог бы "вызывать" группу с помощью некоторые аргументы (если это возможно, разрешить правильную перегрузку в группе). Существуют и другие способы сделать это, но это некоторые вещи, которые вы можете захотеть сделать с группой методов.
Как уже упоминалось несколько человек, я могу принять Delegate
и применить к известному типу делегата при вызове MyFunction
.
public void MyFunction(Delegate d)
{
// do something with d
}
...
MyFunction((Func<object, object, bool>)Object.Equals)
Но это не совсем то же самое, что передать всю группу методов. Это выбирает один метод из группы и преобразует его в конкретный делегат. Я бы очень хотел передать всю группу за один выстрел.