Возможный дубликат:
Как передать событие методу?
Можно ли передать событие в качестве параметра методу?
Например, следующий метод подписывается на событие, выполняет работу и отменяет подписку на событие:
void SubscribeDoAndUnsubscribe<TElement, TEventArgs>(
IEnumerable<TElement> elements,
??? elementEvent)
where TEventArgs: EventArgs
{
EventHandler<TEventArgs> handler = (sender, e) => { /* Handle an event */ };
foreach (var element in elements)
{
// Subscribe somehow
element.elementEvent += handler
}
// Do things
foreach (var element in elements)
{
// Unsubscribe somehow
element.elementEvent -= handler
}
}
Клиентский код:
var elements = new [] { new Button(), new Button() };
SubscribeDoAndUnsubscribe(elements, ??? /* e => e.Click */);
Если это невозможно, как мне достичь аналогичной логики другими способами? Должен ли я передать пару делегатов для методов подписки/отмены подписки?