sab*_*ber 3 .net c# events event-handling
我见过许多开发人员想要调用Event它们将它分配给一个名为的本地变量handler并调用handler而不是Event直接调用.为什么我们不直接调用事件?
private void OnSomethingChanged(EventArgs e)
{
if (SomethingEvent != null)
{
SomethingEvent(this, e);
}
}
Run Code Online (Sandbox Code Playgroud)
你发布的代码基本上不是线程安全的.如果最终用户在不同的线程退订后的if检查,但之前调用,你会得到一个NullReferenceException.
一种选择是编写扩展方法:
public static void NullSafeInvoke(this EventHandler handler,
object sender, EventArgs e)
{
if (handler != null)
{
handler(this, e);
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以写:
private void OnSomethingChanged(EventArgs e)
{
SomethingEvent.NullSafeInvoke(this, e);
}
Run Code Online (Sandbox Code Playgroud)
你也可能想要另一个重载EventHandler<T>.
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |