Рассмотрим:
someControl.Click += delegate { Foo(); };
Аргументы события не имеют значения, они мне не нужны, и я не заинтересован в них. Я просто хочу, чтобы Foo() вызывался. Нет очевидного способа сделать то же самое через отражение.
Я бы хотел перевести это в нечто вроде
void Foo() { /* launch missiles etc */ }
void Bar(object obj, EventInfo info)
{
Action callFoo = Foo;
info.AddEventHandler(obj, callFoo);
}
Кроме того, я не хочу делать предположение, что тип объекта, переданного в Bar, строго соответствует правилам использования сигнатуры EventHander (TArgs) для событий. Проще говоря, я ищу способ подписания действия на любой тип обработчика; менее просто, способ преобразования делегата Action в делегат ожидаемого типа обработчика.