web-dev-qa-db-fra.com

Suppression de gestionnaires d'événements

Est-ce:

Button.Click -= new EventHandler(Button_Click);

le même que celui-ci:

Button.Click -= Button_Click;

Je pose la question car il me semble que la première supprime une nouvelle référence à une méthode, et la seconde supprime une méthode elle-même. Mais là encore, peut-être que la nouvelle partie EventHandler est implicite dans la surcharge + = ou - = au cas où le programmeur ne l'affecterait pas explicitement comme ça?

Dans le cas où il est différent que diriez-vous

Button.Click -= new EventHandler(Button_Click);

CONTRE

Button.Click -= Button_Click;

Merci.

39
Carlo

C'est le même. Le second est simplement du sucre syntaxique pour le premier, et la comparaison d'égalité est surchargée de manière appropriée pour les types de délégués:

Deux délégués du même type avec les mêmes cibles, méthodes et listes d'invocation sont considérés comme égaux.

Source: MSDN, opérateur Delegate.Equality

46
Konrad Rudolph

Le résultat est le même. Le compilateur déduit automatiquement le type de délégué et, par conséquent, le nouvel opérateur n'est pas obligé de le créer.

0
Brian Gideon