我有一個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的時間。在那之前,沒有。 – 2011-01-20 21:53:32
真正的代碼不是直接使用`EventArgs`,而是使用自定義的子類。然而,我看不到任何理由不應該爲每個分派的事件使用相同的委託 - 然後我可以從MulticastDelegate更改爲有問題的委託類型。 – 2011-01-21 16:43:51