Ist es möglich, einer Methode eine beliebige Methodengruppe als Parameter zu übergeben?

Ich möchte eine Funktion wie die folgende schreiben

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

Je später konnte ich anrufenMyFunction mitirgendein Methodengruppe. Etwas wie das.

MyFunction(Object.Equals)

Wenn ich mich zu einer Unterschrift verpflichte, funktioniert alles einwandfrei.

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

Die MethodengruppeObject.Equals wird gerne in den bekannten Delegiertentyp hineingezogenFunc<object, object, bool>, aber ich möchte mich nicht auf eine bestimmte Signatur festlegen. Ich möchte eine Methodengruppe übergebenMyFunction.

Methodengruppen können nicht konvertiert werdenSystem.Object

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

Ich denke, dass jeder einen Methodenaufruf vergessen hat und dies irgendwann entdeckt hat. Ich hoffe, dass dies nicht bedeutet, dass Methodengruppen nicht in erstklassige Objekte konvertiert werden (oder nicht konvertiert werden können).

Ich glaube nicht, dass Linq-Ausdrücke die Art von Allgemeingültigkeit vermitteln, die ich suche, aber ich könnte auf jeden Fall etwas verpassen.

Ich sollte auch erwähnen, dass es in Ordnung wäre, wenn die Methodengruppe Überladungen enthält, vorausgesetzt, ich habe eine Möglichkeit, die Methodengruppe zu untersuchen.

Was würde ich mit einer Methodengruppe machen? Ich könnte alle Signaturen aller Methoden in der Gruppe drucken (Überladungen, Erweiterungsmethoden usw.), oder ich könnte die Gruppe mit einigen Argumenten "aufrufen" (wenn möglich in die richtige Überladung in der Gruppe auflösen). Es gibt andere Möglichkeiten, diese Dinge zu tun, aber es gibt einige Möglichkeiten, die Sie möglicherweise mit einer Methodengruppe tun möchten.

Wie schon von mehreren Leuten erwähnt, kann ich eine annehmenDelegateund auf einen bestimmten bekannten Delegattyp umwandeln, wenn ich anrufeMyFunction.

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

Dies ist jedoch nicht ganz das Gleiche wie das Übergeben der gesamten Methodengruppe. Dadurch wird eine Methode aus der Gruppe ausgewählt und in einen bestimmten Delegaten konvertiert. Ich würde wirklich gerne die ganze Gruppe auf einmal bestehen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage