2016-11-13 6 views
5

Я использую класс, производный от класса UIElement, при написании программы UWP с использованием C#, где я хочу включить обработку входных элементов управления, таких как действия мыши и клавиатуры. Теперь я вижу, что есть уже виртуальные методы, которые говорят OnSomeEvent(), и я могу переопределить этот метод в соответствии с моим процессом обработки, или я могу создать новый метод, обрабатывающий публичные события, определенные в базовом классе, и подписаться на эти входные данные события в конструкторе. Я предполагаю, что эти два метода работают, но Я надеюсь узнать, что является более профессиональным или более целесообразным способом сделать это и почему. Также это поможет объяснить, почему MS предлагает эти два способа одновременно.Должен ли я создать новый метод обработки события или переопределить базовый метод?

Вот события и методы UIElement класса https://msdn.microsoft.com/en-us/library/system.windows.uielement(v=vs.110).aspx#Examples

и пункт процитировать

UIElement предоставляет начальную точку для компоновки элементов характеристик, а также предоставляет виртуальные методы, производные классы могут переопределяться, что может влиять на поведение рендеринга макета элемента и его дочерних элементов. Большая часть ввода и фокусировки поведение элементов в целом также определено в классе UIElement . Сюда входят события ввода клавиатуры, мыши и стилуса, и соответствующие свойства статуса. Многие из этих событий являются маршрутизируемыми событиями, , и многие события, связанные с вводом, имеют как барботирующую маршрутизацию , так и туннельную версию события. Эти парные события , как правило, представляют наибольший интерес для управления авторов.

ответ

1

В производном классе я обычно переопределяю существующий метод.

Почему? Обработчик событий менее надежный, чем метод переопределения. Например, внешние классы могут очищать обработчики событий, но они не могут изменить код в переопределении. Вы должны запечатать свой собственный класс, хотя ваш метод может быть отменен.

Еще один момент, который следует учитывать, заключается в следующем: хочу ли я изменить способ управления? Должен ли я иметь контроль над точным временем выполнения кода (скажем, перед кодом базового класса, после или вместо)? Если это так, вы должны использовать переопределение.

+0

Почему переопределение обеспечивает контроль над точным временем выполнения, в то время как события, как вы можете подразумевать, нет? –

+1

Поскольку события обрабатываются тем, кто подписывается первым, плюс вы не можете обработать что-либо до того, как обработчик события его ударит. Возможно, у 'UIElement' уже есть код, который вы не хотите. Вы можете предотвратить это при переопределении метода. –

Смежные вопросы