Я довольно доволен своим пониманием модели событий .NET. Я думаю, что я мог неправильно понять небольшой нюанс системы.
Когда я начинал помещать события в свои классы, я использовал стандартный способ:
public event EventHandler<MyEventArgs> MyEvent;
Это означало, что для подписки на событие потребуется такой метод:
void HandleThatEvent(object sender, MyEventArgs args){...}
Это хорошо, но я обнаружил, что меня не очень заботит отправитель, поэтому многие подписи метода раздуты.
Поэтому я перешел к объявлению своих собственных типов делегатов
public delegate void MyEventHandler(SomeClass argument);
Который уменьшил беспорядок, но оставил мне небольшую проблему, когда дело дошло до написания обработчиков:
eventImplmentor.MyEvent += HandleThatEvent;
.
.
.
void HandleThatEvent(/*oh, um, what arguments does it take? Intellisense isn't telling me*/)
Поэтому мне придется вернуться к заявлению делегата и посмотреть, а затем вернуться и записать их или скомпилировать и дождаться, когда об этом скажут.
Так что теперь вместо этого я просто использую Action
, Action<T>
или любой другой шаблон подходит.
public event Action<SomeClass> MyEvent;
Так что я могу навести курсор на событие и узнать, какие параметры оно ожидает.
Мой вопрос, после всего этого: есть ли лучшая практика для объявления событий в C #? Должен ли я вернуться на EventHandler<T>
путь, или это Action<T>
приемлемо?