代表和活动

时间:2009-08-23 13:41:00

标签: c# events

我将它们用作不同对象之间的“通信”,作为发布者和订阅者模式。

有些例子我看到有时事件被声明为静态,有时它不是:

public delegate void LogProgress(string str)
public static event LogProgress LogProgressEvent;


 if (LogProgressEvent != null)
                LogProgressEvent(tempString);

为什么以及何时需要使用静态?

2 个答案:

答案 0 :(得分:8)

静态事件实际上非常危险,而且(幸运的是)也非常罕见。与静态的任何东西一样,当它一般适用于类型时,你会使用它,而不是任何特定的实例。即便如此,您可能会在单例实例上看到它,而不是静态事件。

危险在于忘记取消订阅很容易,并最终使群众的物品永远存在;与大多数基于实例的事件形成对比 - 通常,实例最终将超出范围,使委托可收集(委托实例将使目标实例保持活动状态)。

答案 1 :(得分:0)

应用于事件的静态与将静态应用于任何其他C#字段没有区别。

静态事件随时可供调用者使用,即使该类的实例不存在也是如此。我想如果你想从静态方法引发事件,静态事件将是有用的

Marc's answer

中查看使用静态事件的含义