J'ai eu une fois une situation où j'ai dû remplacer le gestionnaire d'événements dans une classe dérivée de la mienne. Je ne pouvais malheureusement pas le "surcharger" car la logique d'implémentation était strictement liée à l'implémentation de cette méthode particulière dans la classe de base.Comment "dissocier" un gestionnaire d'événements attaché à un événement dans la classe de base lorsque je suis dans une classe dérivée?
Mon idée naturelle était d'abord de "délier" le gestionnaire d'événements original de l'événement, puis de lier ma propre méthode. J'ai donc essayé d'utiliser le « - = » opérateur comme:
myObject.SomeEvent -= new EventHandler (BaseClass.SomeEventHandler)
à quel point le râleuse du compilateur qu'il n'a pas eu accès à la méthode privée SomeEventHandler. Comme la classe de base faisait partie de la bibliothèque, je ne voulais pas vraiment modifier sa mise en œuvre (bien que cela paraisse juste en changeant "private" en "protected");
Il est si simple d'attacher un gestionnaire d'événements à un événement. Pourquoi est-il si difficile de s'en débarrasser?
Pourquoi je le voulais? Parce que la mise en œuvre de base posait des problèmes (ne gérait pas notre cas particulier), je voulais donc le redéfinir. Mais même après avoir attaché mon gestionnaire d'événements, l'implémentation de base était de toute façon exécutée. Puisqu'il effectuait une sorte de redirection, ma propre implémentation ne serait jamais exécutée puisque le traitement de la demande était cassé au serveur après la redirection.
Est-il possible de se débarrasser d'un gestionnaire d'événements dans une classe de base à partir d'une bibliothèque sans modifier son implémentation?
Y a-t-il un moyen de se débarrasser de tous les gestionnaires attachés sans y avoir accès? Juste laisser le système secrètement de vous identifier et les dissocier tous? – User
Serez-vous assez aimable pour montrer comment le faire en utilisant la réflexion? – User