2009-02-15 8 views
66

Prenez le code ci-dessous:C#: Différence entre '+ = anEvent' et '+ = new EventHandler (anEvent)'

private void anEvent(object sender, EventArgs e) { 
    //some code 
} 

Quelle est la différence entre ce qui suit?

[object].[event] += anEvent; 

//and 

[object].[event] += new EventHandler(anEvent); 

[UPDATE]

Apparemment, il n'y a pas de différence entre les deux ... le premier est que le sucre syntaxique de celui-ci.

+4

Un outil comme ReSharper vous recommande de supprimer le code superflu car il ajoute que du bruit. –

+1

duplication possible de [gestionnaires d'événements C#] (http://stackoverflow.com/questions/26877/c-sharp-event-handlers) – nawfal

+0

La première ligne ne peut être comprise que par des programmeurs C# expérimentés. La deuxième ligne peut être comprise par les programmeurs C# expérimentés et ceux qui sont plus récents dans la langue. –

Répondre

76

Il n'y a pas de différence. Dans votre premier exemple, le compilateur déduira automatiquement le délégué que vous souhaitez instancier. Dans le second exemple, vous définissez explicitement le délégué.

L'inférence de délégué a été ajoutée en C# 2.0. Donc, pour les projets C# 1.0, le deuxième exemple était votre seule option. Pour les projets 2.0, le premier exemple utilisant l'inférence est ce que je préférerais utiliser et voir dans le code - car il est plus concis.

10

Je ne pense pas qu'il y ait une différence. Le compilateur transforme le premier en second.

14
[object].[event] += anEvent; 

est juste du sucre syntaxique pour -

[object].[event] += new EventHandler(anEvent); 
Questions connexes