2010-08-13 4 views
4

Je crée une classe qui dérive du contrôle WPF RichTextBox et j'ai besoin d'exécuter du code dans les événements copier et coller.Une classe dérivée doit-elle gérer les événements d'une classe de base? (C#/WPF)

Je comprends que, dans la mesure du possible, il est recommandé d'implémenter le code basé sur les événements dans une classe dérivée en remplaçant la méthode de classe de base qui déclenche l'événement. Toutefois, aucune méthode n'existe dans ce cas, il est donc acceptable pour ma classe dérivée d'ajouter un gestionnaire d'événements à ses propres événements de classe de base?

Si j'ajoute un gestionnaire d'événements, je suppose qu'il doit être explicitement supprimé lorsque le contrôle est éliminé. Cependant, je ne suis pas sûr de la meilleure façon de le faire dans le cas de RichTextBox car les classes de contrôle WPF ne semblent pas avoir de mécanisme pour détecter l'élimination.

Des suggestions s'il vous plaît?

Merci, Tim

Répondre

4

Bien sûr, vous pouvez gérer les événements de la classe de base. C'est généralement fait pour l'événement Loaded, par exemple, puisqu'il n'y a pas de méthode OnLoaded. Vous n'avez pas besoin de vous soucier de supprimer le gestionnaire: puisque l'éditeur d'événement et l'abonné sont la même instance, ne pas supprimer le gestionnaire n'empêchera pas le GC de collecter votre objet.

+0

merci beaucoup pour cette précision. Cela semble évident quand on le signale. Est-ce que la même règle s'applique lors de l'application d'un gestionnaire à un objet contenu - dans le cas de RichTextBox, je vais gérer les événements de son instance DataObject contenue? Merci encore. –

+1

Vous ne devez vous soucier que des événements publiés par des objets dont la durée de vie est supérieure à celle de l'abonné. S'il n'y a pas de références externes à DataObject, il sera éligible pour la récupération de place et n'empêchera pas la collecte de votre contrôle. –

Questions connexes