Tant que le groupe de méthodes SomeObject.SomeMethod
a une méthode avec le type de retour void
et ne prend aucun paramètre, il n'y a pas de différence. Cela est dû au fait que ThreadStart
est défini comme delegate
qui renvoie void
et ne prend aucun paramètre. Par conséquent, il existe une conversion implicite du groupe de méthodes SomeObject.SomeMethod
en ThreadStart
. Ainsi, les deux appellent la surcharge Thread(ThreadStart)
du constructeur Thread
.
La section pertinente de la spécification de langage est §6.6 (Conversions de groupes de méthodes).
J'ai une question simple: quel est l'avantage d'instancier un délégué C# par opposition à simplement passer la référence de la fonction?
Donc, juste une correction de la terminologie ici. Avec
class MyObject {
public void SomeMethod() { }
}
MyObject someObject = new MyObject();
la chose notée par someObject.SomeMethod
est un groupe de méthode. Vous pouvez juste penser à cela comme l'ensemble des méthodes surchargées peut être recherché en utilisant la notation someObject.SomeMethod
.
duplication possible de [Quelle est la différence entre une nouvelle action() et un lambda?] (Http://stackoverflow.com/questions/765966/what-is-the-difference-between-new-action-and- a-lambda) – nawfal