Ree*_*sey 65
您可以创建静态事件.您以与普通事件相同的方式使用它们,除了它在类中的静态上下文中使用.
public class MyClass
{
public static event EventHandler MyEvent;
private static void RaiseEvent()
{
var handler = MyEvent;
if (handler != null)
handler(typeof(MyClass), EventArgs.Empty);
}
}
Run Code Online (Sandbox Code Playgroud)
话虽如此,静态事件存在许多问题.您必须特别注意从静态事件中取消订阅对象,因为订阅静态事件将根据您的订阅实例,并防止垃圾收集器收集它.
此外,我发现大多数情况下我想要制作静态事件,我倾向于学习在Singleton上使用标准事件.这处理与静态事件相同的场景,但是(IMO)更明显的是您订阅了"全局"级别实例.
是的你可以.例如,请参阅Application.ApplicationExit.但是,请注意,在附加到静态事件时,该页面上有关内存泄漏的警告; 适用于所有静态事件.
当你使用它们时没有什么神奇之处:当你需要为静态类提供事件或者只处理静态数据的事件时,以这种方式实现它是有意义的.