Używam klasy wywodzącej się z klasy UIElement
podczas pisania programu UWP za pomocą C#, gdzie chcę dołączyć obsługę kontrolek wejściowych, takich jak działania myszy i klawiatury. Teraz widzę, że istnieją już wirtualne metody, które mówią: OnSomeEvent()
i wyraźnie mogę zastąpić te metody, aby dopasować się do mojego procesu obsługi, lub mogę utworzyć nową metodę zdefiniowaną w klasie bazowej i zasubskrybować je do tych danych wejściowych zdarzenia w konstruktorze. Zakładam, że obie te metody działają, ale mam nadzieję, że wiem, który z nich jest bardziej profesjonalny lub bardziej celowy, i dlaczego. Pomoże to również wyjaśnić, dlaczego MS oferuje te dwa sposoby w tym samym czasie.Czy powinienem utworzyć nową metodę obsługi zdarzenia lub przesłonić metodę bazową?
Oto wydarzenia i metod UIElement
klasy https://msdn.microsoft.com/en-us/library/system.windows.uielement(v=vs.110).aspx#Examples
i paragraf cytuje
UIElement stanowi punkt wyjścia dla układu elementem cech, a także naraża metod wirtualnych, które dotyczą zajęcia może przesłonić, co może wpływać na zachowanie renderowania układu elementu i jego elementów podrzędnych. Znaczna część zachowania wejścia i skupienia dla elementów w ogóle jest również zdefiniowana w klasie UIElement . Dotyczy to zdarzeń związanych z wprowadzaniem klawiatury, myszy i pisaka, i pokrewnymi właściwościami statusu. Wiele z tych zdarzeń to zdarzenia routowane, a wiele zdarzeń związanych z wejściami ma zarówno wersję z propagacją rutowania, jak i tunelującą wersję zdarzenia. Te sparowane zdarzenia są zwykle zdarzeniami o największym znaczeniu dla kontroli autorów .
Dlaczego nadpisywanie oferuje kontrolę nad momentem wykonania, podczas gdy zdarzenia, jak możesz sugerować, nie są? –
Ponieważ zdarzenia są obsługiwane, niezależnie od tego, kto zasubskrybuje pierwszy, a także nie można obsłużyć niczego, zanim program obsługi zdarzeń go wyrzuci. Może "UIElement" już uruchomił jakiś kod, którego nie chcesz. Możesz temu zapobiec, gdy zastąpisz metodę. –