学习(三):事件的订阅与发布

 Singleton:单例模板,在学习(二)中

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 事件的订阅与发布
/// </summary>
public class EventManager : Singleton<EventManager>
{
    public delegate void event_handler(string event_name, object udata);

    private Dictionary<string, event_handler> dic = new Dictionary<string, event_handler>();

    /// <summary>
    /// 注册/订阅
    /// </summary>
    /// <param name="event_name">事件名</param>
    /// <param name="h">函数</param>
    public void AddListener(string event_name, event_handler h) {
        if (this.dic.ContainsKey(event_name)) {
            this.dic[event_name] += h;
        }
        else {
            this.dic.Add(event_name, h);
        }
    }

    /// <summary>
    /// 删除/取消
    /// </summary>
    /// <param name="event_name">事件名</param>
    /// <param name="h">函数</param>
    public void RemoveListener(string event_name, event_handler h) {
        if (!this.dic.ContainsKey(event_name)) {
            return;
        }

        this.dic[event_name] -= h;

        if (this.dic[event_name] == null) {
            this.dic.Remove(event_name);
        }
    }

    /// <summary>
    /// 发送事件
    /// </summary>
    /// <param name="event_name">事件名</param>
    /// <param name="udata">参数</param>
    public void DispatchEvent(string event_name, object udata) {
        if (!this.dic.ContainsKey(event_name)) {
            return;
        }

        this.dic[event_name](event_name, udata);
    }

}

猜你喜欢

转载自blog.csdn.net/weixin_41843959/article/details/126010617