É possível passar um grupo de métodos arbitrários como um parâmetro para um método?

Eu gostaria de escrever uma função como a seguinte

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

O mais tarde, eu poderia ligarMyFunction comqualquer grupo de métodos. Algo assim.

MyFunction(Object.Equals)

Se eu me comprometer com uma assinatura, as coisas funcionam bem.

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

O grupo de métodosObject.Equals é feliz coagido para o tipo de delegado conhecidoFunc<object, object, bool>, mas não quero me comprometer com uma assinatura específica. Eu gostaria de passar qualquer grupo de métodos paraMyFunction.

Grupos de métodos não podem ser convertidos paraSystem.Object

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

Eu acho que todos os aparelhos esquecidos de um método chamam e descobriram isso em algum momento. Espero que isso não signifique que os grupos de métodos não sejam (ou não possam ser convertidos) para objetos de primeira classe.

Eu não acho que as expressões do Linq vão dar o tipo de generalidade que estou procurando, mas eu certamente poderia estar perdendo alguma coisa.

Também devo mencionar que seria bom se o grupo de métodos contivesse sobrecargas, desde que eu tenha uma maneira de inspecionar o grupo de métodos.

O que eu faria com um grupo de métodos? Eu poderia imprimir todas as assinaturas de todos os métodos no grupo (sobrecargas, métodos de extensão, etc), ou eu poderia invocar o grupo com alguns argumentos (se possível, resolver a sobrecarga correta no grupo). Existem outras maneiras de fazer essas coisas, mas elas são algumas das coisas que você pode querer fazer com um grupo de métodos.

Como várias pessoas mencionaram, posso aceitarDelegate, e converter para um determinado tipo de delegado conhecido quando eu chamoMyFunction.

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

Mas isso não é exatamente o mesmo que passar todo o grupo de métodos. Isso seleciona um método do grupo e o converte em um delegado específico. Eu realmente gostaria de passar todo o grupo de uma só vez.

questionAnswers(4)

yourAnswerToTheQuestion