基于C#委托事件的消息中心

发布时间 2023-04-13 15:01:44作者: 瞌睡的小牛

消息中心

消息中心模板代码:

enum EventName{}
class MessageCenter : Singleton<MessageCenter>
{
    Dictionary<EventName, Delegate> dic = new Dictionary<EventName, Delegate>();
    /// <summary>
    /// 添加侦听的方法
    /// </summary>
    /// <param name="name"></param>
    /// <param name="act"></param>
    public void AddEventListener(EventName name, Action act)
    {
        if (dic.ContainsKey(name) == false)
        {
            dic.Add(name, act);
        }
        else
        {
            dic[name] = dic[name] as Action + act;
        }
    }
    /// <summary>
    /// 移除侦听的方法
    /// </summary>
    /// <param name="name"></param>
    /// <param name="act"></param>
    public void RemoveEventListener(EventName name, Action act)
    {
        if (dic.ContainsKey(name))
        {
            dic[name] = dic[name] as Action - act;
        }
    }
    /// <summary>
    /// 广播事件的方法
    /// </summary>
    /// <param name="name"></param>
    public void BroadCast(EventName name)
    {
        if (dic.ContainsKey(name))
        {
            Action act = dic[name] as Action;
            if (act != null)
            {
                act();
            }
        }
    }
}

添加重载:

public void AddEventListener<T>(EventName name, Action<T> act)//具有一个泛型参数的添加侦听的方法
{
    if (dic.ContainsKey(name) == false)
    {
        dic.Add(name, act);
    }
    else
    {
        dic[name] = dic[name] as Action<T> + act;
    }
}