Есть ли разница между объявлением event Action<>
и event EventHandler<>
.
Предполагая, что не имеет значения, какой объект действительно вызвал событие.
например:
public event Action<bool, int, Blah> DiagnosticsEvent;
против
public event EventHandler<DiagnosticsArgs> DiagnosticsEvent;
class DiagnosticsArgs : EventArgs
{
public DiagnosticsArgs(bool b, int i, Blah bl)
{...}
...
}
В обоих случаях использование будет почти одинаковым:
obj.DiagnosticsEvent += HandleDiagnosticsEvent;
Есть несколько вещей, которые мне не нравятся в шаблоне event EventHandler<>
:
- Объявление дополнительного типа, полученное из EventArgs
- Принудительное прохождение источника объекта - часто никто не заботится
Дополнительный код означает больше кода для поддержки без каких-либо явных преимуществ.
В результате я предпочитаю event Action<>
Однако, только если в Action < > слишком много аргументов типа, тогда потребуется дополнительный класс.