c# - 总是添加一个空的事件处理程序可以吗?

标签 c# .net events delegates null

<分区>

Possible Duplicate:
Is there a downside to adding an anonymous empty delegate on event declaration?

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

public event Action handler;
…
// some method:
if(handler != null) handler();

为这个事件分配一个空委托(delegate)有什么缺点吗?这将在触发事件的任何地方保存 if !=null 条件。当然,这仅适用于我们无法保证始终为事件分配适当委托(delegate)的情况。

public event Action handler;
…
// in constructor:
handler += ()=>{};
…
// some method:
handler();

当然,这对性能有轻微影响,但它使代码更简洁。在这种情况下,最佳做法是什么?有什么技术上的缺点吗?

最佳答案

有趣的想法,我从来没有想过这样做。我执行自定义事件的方式是创建一个 OnCustomEventName 以获取事件参数,然后在其中检查是否为 null。并在我希望从中触发事件的任何地方从代码中调用 OnCustomEventName。 避免任何性能影响,并使操作代码比 2 行代码更清晰,如果每次您希望触发事件时都进行检查。

话虽如此,这并不是在回答有关技术缺点的问题,而是在触发事件时提供的更多最佳实践。

线程安全“On”函数的示例代码。

private void OnCustomEventName()
{
    DelegateName localhandler = CustomEventName;
    if (localhandler != null)
        localhandler();
}

关于c# - 总是添加一个空的事件处理程序可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10736729/

相关文章:

c# - 在 C# 中使用带有默认命名空间的 Xpath 进行规范化

c# - System.Speech.Recognition 的问题 - SpeechRecognitionEngine 不接收语音

c# - POST Controller 操作方法具有 NULL ViewModel 参数

javascript - WebAssembly 中的 .NET CLR

c# - 从 C# 使用 C 库的技巧

javascript - Promisify 基于事件的模式

python - 单击退出pygame窗口

c# - 如何选择节点名称包含 "mystring"的节点

C# Unix 时间戳

c# - 我的 http 模块中未触发 BeginRequest 事件