M.A*_*nin 4 .net c# events lambda delegates
习惯于VB.NET,我习惯于"只是举起事件".当然,自定义事件有所不同,但是"常规"事件 - 我不需要Nothing在提升之前检查代表是否是.
使用C#,我发现自己重复这种模式:
if (myHandler != null)
{
myHandler(this, new EventArgs());
}
Run Code Online (Sandbox Code Playgroud)
我以为以下模式可能会更优雅:
myHandler = (sender, e) => { };myHandler(this, new EventArgs());这种模式会比前一种模式更多或更少吗?我还应该考虑其他重要因素吗?
这在建筑中是额外的事情,但它不会是巨大的开销.需要注意的一点是,某些序列化框架DataContractSerializer(如(WCF))不运行构造函数或字段初始值设定项,因此它可能不是非null.就个人而言,如果您的大部分活动都是EventHandler,我可能会尝试使用扩展方法:
public static void SafeInvoke(this EventHandler handler, object sender) {
if (handler != null) handler(sender, EventArgs.Empty);
}
Run Code Online (Sandbox Code Playgroud)
然后:
SomeEvent.SafeInvoke(this);
Run Code Online (Sandbox Code Playgroud)
虽然坦率地说,我很少使用null-check来解决问题; p
另一个缺点是,如果你有足够的事件,这是一个问题,你可能应该使用EventHandlerList- 而这种方法将无法使用EventHandlerList.
| 归档时间: |
|
| 查看次数: |
2528 次 |
| 最近记录: |