Должен ли я создать новый метод для обработки события или переопределить базовый метод?
Я использую класс, полученный из UIElement
класс при написании программы UWP с использованием C#, где я хочу включить обработку элементов управления вводом, таких как действия мыши и клавиатуры. Теперь я вижу, что уже есть виртуальные методы, которые говорят OnSomeEvent()
и, разумеется, я могу переопределить этот метод, чтобы он соответствовал моему процессу обработки, или я могу создать новый метод, обрабатывающий публичные события, определенные в базовом классе, и подписать их на эти входные события в конструкторе. Я предполагаю, что оба эти метода работают, но я надеюсь узнать, какой из них более профессиональный или более целесообразный, и почему. Также это поможет объяснить, почему MS предлагает эти два способа одновременно.
Вот события и методы UIElement
класс https://msdn.microsoft.com/en-us/library/system.windows.uielement(v=vs.110).aspx
и абзац цитаты
UIElement предоставляет отправную точку для характеристик макета элемента, а также предоставляет виртуальные методы, которые могут переопределять производные классы, что может влиять на поведение рендеринга макета элемента и его дочерних элементов. Большая часть поведения ввода и фокусировки для элементов в целом также определяется в классе UIElement. Сюда входят события для ввода с клавиатуры, мыши и стилуса, а также связанные свойства состояния. Многие из этих событий являются перенаправленными событиями, и многие из событий, связанных с вводом, имеют как версию пузырьковой маршрутизации, так и версию события туннелирования. Эти парные события обычно представляют собой события, представляющие наибольший интерес для контрольных авторов.
1 ответ
В производном классе я обычно переопределяю существующий метод.
Зачем? Обработчик событий менее надежен, чем метод переопределения. Например, внешние классы могут очищать обработчики событий, но они не могут изменять код в переопределении. Вы должны закрыть свой собственный класс, иначе ваш метод может быть переопределен.
Еще один момент, который следует учитывать: хочу ли я изменить способ управления? Должен ли я контролировать точный момент выполнения кода (скажем, перед кодом базового класса, после или вместо)? Если это так, вы должны использовать переопределение.