2016-11-13 8 views
5

J'utilise une classe dérivée de UIElement classe lors de l'écriture d'un programme UWP utilisant C#, où je veux inclure la manipulation des commandes d'entrée telles que les actions de la souris et du clavier. Maintenant, je vois qu'il existe déjà des méthodes virtuelles qui dit OnSomeEvent() et clairement je peux remplacer ces méthodes pour s'adapter à mon processus de traitement, ou je peux créer une nouvelle méthode gérer les événements publics définis dans la classe de base, et les abonner à ces entrée événements dans le constructeur. Je suppose que ces deux méthodes fonctionnent toutes les deux mais J'espère savoir quelle est la façon la plus professionnelle ou la plus conseillée de le faire, et pourquoi. En outre, cela aiderait à expliquer pourquoi MS offre ces deux façons en même temps.Dois-je créer une nouvelle méthode pour gérer l'événement ou remplacer la méthode de base?

est ici les événements et les méthodes de UIElement classe https://msdn.microsoft.com/en-us/library/system.windows.uielement(v=vs.110).aspx#Examples

et un paragraphe de citer

UIElement fournit un point de départ pour la mise en élément caractéristiques et expose également des méthodes virtuelles classes dérivées peut surcharger, ce qui peut influencer le comportement de rendu de la disposition de l'élément et de ses éléments enfants. Une grande partie du comportement d'entrée et de mise au point pour les éléments en général est également définie dans la classe UIElement . Cela inclut les événements pour l'entrée du clavier, de la souris et du stylet, et les propriétés d'état associées. Un grand nombre de ces événements sont des événements mis en déroute, et la plupart des événements liés à la saisie-ont à la fois un bouillonnement de routage la version ainsi qu'une version tunnel de l'événement. Ces événements appariés sont généralement les événements les plus intéressants pour contrôler les auteurs .

Répondre

1

Dans une classe dérivée, je remplace généralement la méthode existante.

Pourquoi? Le gestionnaire d'événements est moins fiable que la méthode override. Par exemple, les classes externes peuvent effacer les gestionnaires d'événements, mais ils ne peuvent pas modifier le code dans le remplacement. Vous devez sceller votre propre classe, ou votre méthode peut être surchargée.

Un autre point à considérer est le suivant: est-ce que je veux changer le fonctionnement du contrôle? Dois-je contrôler le moment d'exécution exact du code (disons avant le code de la classe de base, après, ou au lieu de)? Si c'est le cas, vous devez utiliser override.

+0

Pourquoi primordial en offrant un contrôle sur l'exécution exacte moment alors que les événements, que vous pouvez entendre, n'est pas? –

+1

Étant donné que les événements sont gérés par ceux qui s'abonnent en premier, plus vous ne pouvez gérer quoi que ce soit avant que le gestionnaire d'événements ne le lance. Peut-être que le 'UIElement' a déjà exécuté du code que vous ne voulez pas. Vous pouvez empêcher cela lorsque vous remplacez la méthode. –