.Net несколько обработчиков событий для каждого события, которое возвращает значение

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

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

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-й? ни один? оба?


person puffpio    schedule 08.05.2009    source источник


Ответы (2)


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

person John Weldon    schedule 08.05.2009

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

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

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

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

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

который гарантированно находится в том порядке, в котором они были добавлены:

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

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

person Mark Brackett    schedule 08.05.2009