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

后端 未结 4 1865
时光说笑
时光说笑 2020-12-03 04:16

I want to know can we declare the events as static if yes why and application of such declaration.

Sample please as seeing is believing

4条回答
  •  野趣味
    野趣味 (楼主)
    2020-12-03 05:01

    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.

提交回复
热议问题