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

本文关键字:事件 订阅 Singleton 静态 | 更新日期: 2023-09-27 18:18:36

谁能告诉我这两种不同方法的区别?我知道这两种方法都可以处理相同的场景,但是使用第一种或第二种方法有什么优缺点吗?你们会选什么,为什么?

直接订阅事件(使用静态事件):

    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;

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

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