Question

Ce qui me préoccupe, c’est que j’ai découvert deux façons d’inscrire des délégués à des événements.

  1. OnStuff + = this.Handle;
  2. OnStuff + = new StuffEventHandler (this.Handle);

Le premier est propre et il est logique de faire "OnStuff - = this.Handle;" se désinscrire de l'événement ... Mais dans ce dernier cas, devrais-je faire "OnStuff - = new StuffEventHandler (this.Handle);" J'ai l'impression de ne rien enlever du tout, car je jette une autre référence sur StuffEventHandler. L'événement compare-t-il le délégué par référence? Je crains de pouvoir créer un pool de mémoire désagréable ici. Obtenez moi? Je n'ai pas la référence au "nouveau StuffEventHandler" Je me suis déjà inscrit.

Quel est l'inconvénient de faire # 1?

Quel est l'avantage de faire # 2?

Était-ce utile?

La solution

Vous n'avez pas à vous soucier de conserver une référence au délégué enregistré à l'origine et vous ne lancerez pas de "pool de mémoire désagréable".

Lorsque vous appelez "OnStuff - = new StuffEventHandler (this.Handle);" le code de suppression ne ne ne compare pas le délégué que vous supprimez par référence: il vérifie l’égalité en comparant les références aux méthodes cibles que le délégué appellera, et supprime les délégués correspondants de "OnStuff". ;.

Au fait, "OnStuff &"; lui-même est un objet délégué (le mot clé event que vous supposez dans votre déclaration restreint simplement l’accessibilité du délégué).

Autres conseils

Le numéro un est juste un raccourci qui générera le même MSIL que le deuxième. Au type de compilation, il examinera ceci.Traitement et infère le délégué à instancier. Mais vous ne devriez jamais vous désabonner en utilisant un nouveau.

Donc, il n'y a pas de différence entre les 2, juste du sucre syntaxique pour rendre notre code plus propre.

J'avais l'impression que 2 n'est que sucre en syntaxe. Ils devraient être exactement la même chose.

Si je me souviens bien, la première alternative est simplement le sucre syntaxique pour la seconde.

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