Solange die Methodengruppe SomeObject.SomeMethod
hat eine Methode mit Rückgabetyp void
und ohne Parameter gibt es keinen Unterschied. Der Grund dafür ist ThreadStart
ist definiert als ein delegate
die zurückgibt void
und nimmt keine Parameter an, so dass es eine implizite Konvertierung aus der Methodengruppe SomeObject.SomeMethod
zu ThreadStart
. Beide rufen also die Überlast auf Thread(ThreadStart)
の Thread
Konstrukteur .
Der entsprechende Abschnitt der Sprachspezifikation ist §6.6 (Methodengruppenumwandlungen).
Ich habe eine einfache Frage: Was ist der Vorteil der Instanziierung eines C#-Delegaten im Gegensatz zu nur die Funktionsreferenz übergeben?
Also, nur eine Korrektur der Terminologie. Mit
class MyObject {
public void SomeMethod() { }
}
MyObject someObject = new MyObject();
die Sache, die mit someObject.SomeMethod
ist eine Methodengruppe. Man kann sie sich einfach als die Menge der überladenen Methoden vorstellen, die man mit der Notation someObject.SomeMethod
.