我经常看到像这样的代码在源代码中分散复制:
var handler = MyEvent;
if (handler != null)
{
handler.Invoke(null, e);
}
有没有什么理由不在扩展方法中封装它,就像这样?
public static void SafeInvoke<T>(this EventHandler<T> theEvent, object sender, T e) where T : EventArgs
{
var handler = theEvent;
if (handler != null)
{
handler.Invoke(sender, e);
}
}
这样,调用可以像这样进行:
MyEvent.SafeInvoke(this, new MyEventArgs(myData));
该技术与IT相关。
public event SomeEventHandler Foo = delegate { };
。 - Ed S.