un peu d'explication :
Un delegate c'est un peu un pointeur de fonction. Sauf qu'il peu pointer sur plusieur fonction ![:D](https://www.developpez.net/forums/images/smilies/icon_biggrin.gif)
Normalement lorsqu'un événement se déclenche, toutes les méthodes abonnées au delagate de l'event se déclenchent.
Normalement tu fait comme cela pour définir un delagate et un event :
1 2
| public delegate void DelegueReInitialiser();
public static event DelegueReInitialiser ReInitialiser; |
Avec cela tu as l'evénement reinitialiser qui est défini. Tu peux t'y abonnés du coup :
ReInitialiser += new DelegueReInitialiser(Methode_ReInitialiser);
Methode_ReInitialiser étant la méthode que tu abonne au delegate.
Donc en resumé :
Event += new Delegate_de_l_event(MA_méthode_a_abonné);
En fait si tu veux comprendre il vaut mieux l'écrire de cette manière :
Event = Event + new Delegate(methode)
Bon ok cela parait un peu tordu, mais il y a une logique derière que j'ai un peu oublier. C'est la logique du delegate. Bref cela vient du fait que les classe peuvent être enumérable grace au [].
Pour une classe enumerable comme une list si tu fait List[0], en fait tu dis va me chercher le premier élément de la liste et renvois le moi. Pas besoin de faire une fonction comme en C.
Donc pour en revenir au delegate, ils sont énumérable, et donc ils sont un peu comme une collection de pointeur de fonction ![:D](https://www.developpez.net/forums/images/smilies/icon_biggrin.gif)
Avec le mot clé new devant un delegate le compilo comprends que tu veux ajouter un "pointeur de fonction" de la méthode entre paranthèse, à la collection représenté par le délégué.
Ensuite avec le Event += juste avant, il comprend que tu veux l'associé à un Event.
Note que je ne sais pas si l'on peut rajouter une fonction à un delegate lié à un event, sans spécifié que le méthode sera aussi lié à l'événement.
Bref je veux dire que je sais pas si on peut faire :
new Delegate_de_l_event(MA_méthode_a_abonné);
sans mettre le "Event +=" puisque l'on est dans le cas d'un délégate lié à un event ![:D](https://www.developpez.net/forums/images/smilies/icon_biggrin.gif)
Le dernier point :
SystemEvents.SessionSwitch -= new SessionSwitchEventHandler(SessionSwitchEventHook);
Le gars se désabonne du delegate ![:D](https://www.developpez.net/forums/images/smilies/icon_biggrin.gif)
D'où le placement dans le dispose
Partager