C#实现全局的事件管理器
C#构建一个全局的事件管理器 管理器有两个主要部分组成 1.EventManager 2.DataArgs EventManager类 EventManager 是事件管理器的核心类,采用单例模式实现,有三个主要的成员方法,负责事件的添加,删除和触发。 AddEventListener 添加事件 RemoveEventListenter 删除事件 EventFire 触发事件 事件保存在一个字典eventsDict中, 以事件的名称作为字典的key,Value是一个列表,用来保存要触发执行方法 public class EventManager { private Dictionary<string, List<Action<DataArgs>>> eventsDict = new Dictionary<string, List<Action<DataArgs>>>(); private static EventManager instance = null; public static EventManager Instance { get { if(instance == null) { instance = new EventManager(); } return instance; } } public void AddEventListener(string eventName, Action<DataArgs> func) { if (eventsDict.ContainsKey(eventName) && eventsDict[eventName].Contains(func)) { Debug.WriteLine("event aready exist eventName=" + eventName + ", func=" + func.Method.Name); return; } if (!eventsDict.ContainsKey(eventName)) { eventsDict.Add(eventName, new List<Action<DataArgs>>()); } List<Action<DataArgs>> list = eventsDict[eventName]; list.Add(func); } public void RemoveEventListenter(string eventName, Action<DataArgs> func) { if (!eventsDict.ContainsKey(eventName)) { return; } eventsDict[eventName].Remove(func); } public void EventFire(string eventName, DataArgs arg) { if (!eventsDict.ContainsKey(eventName)) { Debug.WriteLine("event doesn't add yet! eventName=" + eventName); return; } List<Action<DataArgs>> list = eventsDict[eventName]; for (int i = 0; i < list.Count; i++) { list[i](arg); } } } DataArgs 事件传递的参数数据 DataArgs 有一个数据字典data用来存放要传的数据,并且暴露了两个方法Set 和 Get 用来设置要传递的数据和获取传过来的数据 ...