我将它们用作不同对象之间的"通信",作为发布者和订阅者模式.
我看到一些例子,有时事件被声明为静态,有时它不是:
public delegate void LogProgress(string str)
public static event LogProgress LogProgressEvent;
if (LogProgressEvent != null)
LogProgressEvent(tempString);
Run Code Online (Sandbox Code Playgroud)
为什么以及何时需要使用静态?
静态事件实际上非常危险,而且(幸运的是)也非常罕见.与静态的任何东西一样,当它一般适用于类型时,你会使用它,而不是任何特定的实例.即便如此,您可能会在单例实例上看到它而不是静态事件.
危险的是忘记取消订阅很容易,并最终使大量物体永远活着; 与大多数基于实例的事件形成对比 - 通常,实例最终会超出范围,使代理可收集(委托实例将使目标实例保持活动状态).