是否可以始终添加空事件处理程序?

kni*_*ttl 6 .net c# null events delegates

可能重复:
在事件声明中添加匿名空委托是否有缺点?

使用事件处理程序(在C#中)时,以下模式非常常见:

public event Action handler;
…
// some method:
if(handler != null) handler();
Run Code Online (Sandbox Code Playgroud)

为此事件分配空委托是否有任何缺点?这将在if !=null任何地方保存条件,事件被触发.当然,这只适用于我们无法保证事件总是被赋予适当的委托.

public event Action handler;
…
// in constructor:
handler += ()=>{};
…
// some method:
handler();
Run Code Online (Sandbox Code Playgroud)

当然,性能略有下降,但它使代码更清晰.在这种情况下,最佳做法是什么?任何技术缺点?

dav*_*d.s 1

您可以将处理程序包装在一个函数中,而不是在构造函数中添加空委托,该函数首先检查处理程序是否为 null,然后调用它。这样做的缺点是,如果您有很多事件,那么您将有很多包装每个事件的函数。

private void HandlerWrapper()
{
    Action localHandler = handler;
    if (localHandler != null) handler();
}
Run Code Online (Sandbox Code Playgroud)