Can Events be declared as Static, if yes how and why

You can create static events. You use them the same way as a normal event, except that it's used in a static context within the class.

public class MyClass
{
    public static event EventHandler MyEvent;
    private static void RaiseEvent()
    {
        MyEvent?.Invoke(typeof(MyClass), EventArgs.Empty);
    }
}

That being said, there are many issues with static events. You must take extra care to unsubscribe your objects from static events, since a subscription to a static event will root your subscribing instance, and prevent the garbage collector from ever collecting it.

Also, I've found that most cases where I'd want to make static events, I tend to learn towards using a standard event on a Singleton instead. This handles the same scenarios as a static event, but is (IMO) more obvious that you're subscribing to a "global" level instance.


Yes, you can. See, for example, Application.ApplicationExit. Note, however, the warnings on that page about memory leaks when attaching to static events; that applies to all static events.

There's nothing magical about when you use them: when you need to provide an event for a static class or an event that deals exclusively with static data and it makes sense to implement it this way.

Tags:

C#