У меня есть MulticastDelegate
, который может ссылаться на одного из нескольких (устаревших) делегатов, имеющих одну и ту же подпись. Например:Использование MulticastDelegate в качестве параметра, избегая DynamicInvoke
public delegate void ObjectCreated(object sender, EventArgs args);
public delegate void ObjectDeleted(object sender, EventArgs args);
//...
Эти делегаты затем используются для определения событий:
public event ObjectCreated ObjectWasCreated;
public event ObjectDeleted ObjectWasDeleted;
Я тогда метод, который принимает в MulticastDelegate
, что я использую, чтобы сделать некоторые общие проверки:
void DispatchEvent(MulticastDelegate handler, object sender, EventArgs args)
{
if (handler != null)
{
// ...
handler.DynamicInvoke(sender, args);
}
}
, который вызывается из других методов класса, в котором были определены события:
DispatchEvent(ObjectWasCreated, sender, args);
DispatchEvent(ObjectWasDeleted, sender, args);
Есть ли более краткий способ сделать это, чтобы избежать DynamicInvoke?
Время для этого устаревшего кода для обновления до EventHandler. До тех пор, нет. –
Настоящий код напрямую не использует 'EventArgs', но использует собственный подкласс. Однако я не вижу причин, по которым он не должен использовать один и тот же делегат для каждого из отправленных событий - тогда я могу изменить его из MulticastDelegate на тип делегирования. –