В чем разница между обработкой события, расширением класса и переопределением связанного метода защиты On ...? - PullRequest
0 голосов
/ 20 мая 2019

В сборке .NET System.Windows классы часто определяют события и вызывают их в течение всего времени жизни объекта.Например, класс UIElement определяет событие KeyUp, которое является «псевдонимом события Keyboard.KeyUp»:

public event KeyEventHandler KeyUp;

Однако он также объявляет метод protected OnKeyUp, который вызываетсяпосле запуска события:

protected virtual void OnKeyUp(KeyEventArgs e);

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

Мой вопрос: учитывая мой класс, который расширяет класс UIElement, в чем разница между переопределением защищенного метода и обработкой соответствующего события?Есть ли разница вообще?Есть ли польза от использования защищенных методов по сравнению с обработкой событий?

1 Ответ

0 голосов
/ 20 мая 2019

Функционально они обычно используются взаимозаменяемыми способами. Теоретически, вы можете сделать немного больше в подходе override - вы можете подавить событие от повышения до внешних абонентов или изменить то, что они видят, с точки зрения параметров, которые они получают (делая вид, что * 1004 Например, была нажата * другая кнопка), но ... большую часть времени вы этого не делаете, так что это спорный вопрос. Есть также некоторые незначительные изменения с точки зрения реальных участвующих объектов. При использовании override вы также получаете больше гарантий, чем , когда ваш код происходит (если у одного события / объекта несколько подписчиков). Но опять же: обычно они в значительной степени взаимозаменяемы. Возможно, это больше общее - override, когда это тот же объект , вызывающий и обрабатывающий, а не подписывающийся на события на вас , но любой из них будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...