webentwicklung-frage-antwort-db.com.de

Was ist eine Methodengruppe in C #?

Ich habe oft einen Fehler festgestellt, wie zum Beispiel "Konvertieren von 'Methodengruppe' in 'Zeichenfolge' nicht möglich" in Fällen wie:

var list = new List<string>();
// ... snip
list.Add(someObject.ToString);

natürlich gab es einen Tippfehler in der letzten Zeile, weil ich die Aufrufklammern nach ToString vergessen habe. Die richtige Form wäre:

var list = new List<string>();
// ... snip
list.Add(someObject.ToString()); // <- notice the parentheses

Allerdings habe ich mich gefragt, was eine Methodengruppe ist. Google ist weder eine große Hilfe noch MSDN .

332
Andrei Rînea

Eine Methodengruppe ist der Name für eine Gruppe von Methoden (das könnte nur eine sein) - dh theoretisch kann die ToString -Methode mehrere Überladungen haben (plus alle Erweiterungsmethoden): ToString(), ToString(string format), etc - daher ist ToString für sich genommen eine "Methodengruppe".

Normalerweise kann eine Methodengruppe mithilfe einer Überladungsauflösung in einen (typisierten) Delegaten konvertiert werden, jedoch nicht in eine Zeichenfolge usw .; Das ergibt keinen Sinn.

Sobald Sie Klammern hinzugefügt haben, erneut; Die Überlastungslösung setzt ein und Sie haben einen Methodenaufruf eindeutig identifiziert.

307
Marc Gravell

Wenn Sie LINQ verwenden, können Sie anscheinend auch etwas wie myList.Select(methodGroup) ausführen.

So habe ich zum Beispiel:

private string DoSomethingToMyString(string input)
{
    // blah
}

Anstatt die zu verwendende Variable explizit wie folgt anzugeben:

public List<string> GetStringStuff()
{
    return something.getStringsFromSomewhere.Select(str => DoSomethingToMyString(str));
}

Ich kann den Namen der var einfach weglassen:

public List<string> GetStringStuff()
{
    return something.getStringsFromSomewhere.Select(DoSomethingToMyString);
}
154
Kaeles

Sie können eine Methodengruppe in einen Delegaten umwandeln.

Die Delegatensignatur wählt 1 Methode aus der Gruppe aus.

In diesem Beispiel wird die ToString() -Überladung ausgewählt, für die ein Zeichenfolgenparameter verwendet wird:

Func<string,string> fn = 123.ToString;
Console.WriteLine(fn("00000000"));

In diesem Beispiel wird die Überladung ToString() ausgewählt, die keine Parameter akzeptiert:

Func<string> fn = 123.ToString;
Console.WriteLine(fn());
20
Jack

Das erste Ergebnis Ihrer MSDN-Suche lautete:

Die Methodengruppe gibt die eine aufzurufende Methode oder den Satz überladener Methoden an, aus denen eine bestimmte aufzurufende Methode ausgewählt werden soll

mein Verständnis ist, dass im Grunde, weil, wenn Sie nur schreiben someInteger.ToString kann sich beziehen auf:

Int32.ToString(IFormatProvider) 

oder es kann sich beziehen auf:

Int32.ToString()

man spricht daher von einer Methodengruppe.

18
oscarkuo

Die ToString -Funktion hat viele Überladungen - die Methodengruppe wäre die Gruppe, die aus allen verschiedenen Überladungen für diese Funktion besteht.

17