2017-01-31 6 views
0

Ich bin verwirrt. Die Dokumentation sagt, dass ein ThreadStart- oder ParametricizedThreadStart-Delegat erwartet wird, aber eine Methodenreferenz übergeben werden kann. Wie kommt es, dass es einen einfachen Verweis auf eine Methode akzeptiert, warum gibt es keine Konstruktorsignatur, die dies spezifisch bestimmt? Oder ist ein Delegat funktional identisch mit einer Methodenreferenz, wenn es um Typprüfung geht? Ich bin etwas unerfahren, wenn es um .net geht, und das ist sehr verwirrend für mich.Warum kann ich einen Funktionsnamen an den System.Threading.Thread-Konstruktor übergeben

Vielen Dank im Voraus.

+0

eine Zeile Code im Wert von wenigen Absätzen manchmal ... – Sinatr

+0

Wenn Sie den Namen einer Funktion übergeben wird es einen Delegaten für die Funktion erstellen, die die params Inferes/Rückgabetypen von der Funktion Unterschrift, so dass am Ende der kompilierte Code der gleiche sein wird. – Gusman

+1

Oder vielleicht [dieser] (http://stackoverflow.com/q/6056983/1997232)? – Sinatr

Antwort

0

Ein Delegat ist eine "Methodenreferenz" von Arten, und per Definition ist auch ein Verweis auf eine Methode. So sind die beiden äquivalent:

var thread = new Thread(new ThreadStart(MyMethod)); 
// or 
var thread = new Thread(MyMethod); // Assuming Mymethod conforms to the right spec 
Verwandte Themen