Я досить задоволений своїм розумінням моделі подій .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>прийнятно?