精简的EventManager

来源:互联网 发布:如何做网络黄牛 编辑:程序博客网 时间:2024/05/17 06:47
using System;using System.Collections.Generic;public abstract class GameEvent{}public static class EventManager{    private abstract class EventListerner    {        public abstract void Trigger(GameEvent Msg);    }    private class EventListnerImpl<T> : EventListerner where T : GameEvent    {        public event Action<T> OnEvent = null;        public override void Trigger(GameEvent Msg)        {            if (OnEvent != null)            {                OnEvent((T) Msg);            }        }    }    private static readonly Dictionary<string, EventListerner> EventList_ = new Dictionary<string, EventListerner>();    public static void Send<T>(T Event) where T : GameEvent    {        string EventName = typeof(T).Name;        if (EventList_.ContainsKey(EventName))        {            ((EventListnerImpl<T>)EventList_[EventName]).Trigger(Event);        }    }    public static void Register<T>(Action<T> Callback) where T : GameEvent    {        string EventName = typeof(T).Name;        if (!EventList_.ContainsKey(EventName))        {            EventList_.Add(EventName, new EventListnerImpl<T>());        }        ((EventListnerImpl<T>) EventList_[EventName]).OnEvent += Callback;    }    public static void UnRegister<T>(Action<T> Callback) where T : GameEvent    {        string EventName = typeof(T).Name;        if (EventList_.ContainsKey(EventName))        {            ((EventListnerImpl<T>)EventList_[EventName]).OnEvent -= Callback;        }    }}

0 0