Question

En C#, quelle est la différence (le cas échéant) entre ces deux lignes de code ?

tmrMain.Elapsed += new ElapsedEventHandler(tmrMain_Tick);

et

tmrMain.Elapsed += tmrMain_Tick;

Les deux semblent fonctionner exactement de la même manière.C# suppose-t-il simplement que vous parlez du premier lorsque vous tapez le second ?

Était-ce utile?

La solution

j'ai fait ça

static void Hook1()
{
    someEvent += new EventHandler( Program_someEvent );
}

static void Hook2()
{
    someEvent += Program_someEvent;
}

Et puis j'ai parcouru le code avec ildasme.
Le MSIL généré était exactement le même.

Donc pour répondre à votre question, oui, c'est la même chose.
Le compilateur déduit simplement que vous voulez someEvent += new EventHandler( Program_someEvent );
-- Vous pouvez le voir créer le nouveau EventHandler objet dans les deux cas dans le MSIL

Autres conseils

Autrefois (jours .NET 1.x), le formulaire long était le seul moyen de le faire.Dans les deux cas, vous créez un délégué pour pointer vers la méthode Program_someEvent.

Je ne pense pas qu'il y ait de différence.Resharper dit certainement que la première ligne contient du code redondant.

Un petit hors sujet :

Vous pouvez instancier un délégué (new EventHandler(MethodName)) et (le cas échéant) réutiliser cette instance.

N'était-ce pas le new XYZEventHandler require jusqu'en C#2003, et vous étiez autorisé à omettre le code redondant en C#2005 ?

Je pense que la seule façon de vraiment le savoir serait de regarder le MSIL produit pour le code.Cela a tendance à être un bon test d’acidité.

J'ai de drôles d'inquiétudes quant au fait que cela puisse gâcher GC.Cela semble étrange qu'il y ait toute la surcharge liée à la déclaration du nouveau type de délégué si cela n'avait jamais besoin d'être fait de cette façon, vous savez ?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top