事件订阅使用静态事件或通过Singleton订阅?

时间:2014-08-18 16:00:26

标签: c# events static singleton

有人可以告诉我这两种不同方法之间的区别。我知道他们两个都可以处理相同的情况,但使用第一种或第二种方法是否有任何利弊?你们会选择什么?为什么?

直接订阅活动(使用静态活动):

    public class MyEffect : BaseEffect
    {
      public delegate void EventHandler (Element sender, Unit target);
      public static event EventHandler OnMyEvent;

      public Damage(Element elementOwner)
      {
        this.Owner = elementOwner;
      }

      public void DispatchEvent(Unit target)
      {
        if (OnMyEvent != null)
        {
            OnMyEvent(this.Owner, target);
        }
      }
   }

=>活动订阅:

      MyEffect.OnMyEvent += CallBack;

或通过Singleton订阅:

    public class MyEffect : BaseEffect
    {
      public delegate void EventHandler (Element sender, Unit target);
      public event EventHandler OnMyEvent;

      private static MyEffect instance;

      public static MyEffect Instance
      {
        get
        {
            return instance;
        }
      }

      public Damage(Element elementOwner)
      {
        this.Owner = elementOwner;
      }

      public void DispatchEvent(Unit target)
      {
        if (OnMyEvent != null)
        {
            OnMyEvent(this.Owner, target);
        }
      }
   }

=>活动订阅:

      MyEffect.Instance.OnMyEvent += CallBack;

1 个答案:

答案 0 :(得分:0)

使用第一种方法。你必须实例化的对象是轻量级的,除非你有明显的理由使用单例(昂贵的对象或大量使用的等),采用最简单的方法;这是上面的第一个。