Можем ли мы иметь одного и того же делегата на два мероприятия - PullRequest
2 голосов
/ 13 апреля 2010

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

Ответы [ 3 ]

4 голосов
/ 13 апреля 2010

Вы имеете в виду использование одного и того же делегата типа для двух разных объявлений событий или использование одного и того же делегата экземпляр для подписки на два разных события? И то, и другое разрешено:

public event EventHandler Foo;
public event EventHandler Bar;
...
EventHandler handler = SomeMethod;
Foo += handler;
Bar += handler;
4 голосов
/ 13 апреля 2010

Конечно, многие события используют EventHandler в качестве простого делегата.

Или вы имеете в виду, что вы можете подписать множество событий на один и тот же метод? Это также возможно, вы можете подписаться, например, подписать TextChanged-Events из всех текстовых полей одному и тому же делегату. Специально для валидации и валидации событий полезно использовать только один метод для всех полей, использующих одну и ту же логику валидации.

События, как правило, многоадресные в .NET, поэтому вы можете подписать множество делегатов на одно событие. Например, вы можете указать два или три метода проверки для текстовых полей и подписать событие TextBox.Validating на все методы, которые проверяют один аспект ввода.

0 голосов
/ 13 апреля 2010

Пока обработчики событий одинаковы, вы можете иметь один и тот же обработчик на столько событий, сколько хотите.

С MSDN :

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

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