.Net несколько обработчиков событий на событие, которое возвращает значение - PullRequest
3 голосов
/ 09 мая 2009

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

см. Этот пример

public class MyClass
{
 public delegate bool MyEventHandler(object sender, EventArgs e);
 public event MyEventHandler Submit;

 public void DoSubmissions()
 {
  if (Submit != null && Submit(this, null))
  {
   Console.Write("HOORAY");
  }
 }
}

поэтому в моем примере обработчик возвращает true при успешной отправке. но я назначаю два обработчика на событие ... что происходит? возврат первого обработчика используется? 2-й? ни? как?

Ответы [ 2 ]

6 голосов
/ 09 мая 2009

В общем, плохой дизайн.

Рассмотрите возможность использования шаблона, подобного CancelEventArgs , где вы встраиваете возвращаемое значение в EventArgs. Это позволяет будущим обработчикам проверять и / или изменять значение. ref будет работать так же, как если бы передавалось от обработчика к обработчику , но это немного неожиданно для IMO:

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

Но да - в вашем примере это последний обработчик с именем :

Когда сигнатура методов, вызываемых делегатом, включает возвращаемое значение, делегат возвращает возвращаемое значение последнего элемента в списке вызовов.

, что гарантированно будет в том порядке , в которое они были добавлены:

результатом операции [сложение] является новый экземпляр делегата, который при вызове вызывает первый операнд, а затем вызывает второй операнд

Но, поскольку никакой обработчик не знает, является ли он первым, средним или последним, он кажется мне бесполезным.

4 голосов
/ 09 мая 2009

используется возвращаемое значение последнего зарегистрированного события.

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