事件的基类:
using System;
using System.Collections.Generic;
public class EventSender<TKey,TValue>
{
private Dictionary<TKey, Action<TValue>> dic = new Dictionary<TKey, Action<TValue>>();
public void AddListener(TKey pKey,Action<TValue> pAction)
{
Action<TValue> _cbs;
if (dic.TryGetValue(pKey, out _cbs))
{
dic[pKey] = _cbs + pAction;
}
else
{
dic.Add(pKey, pAction);
}
}
public void RemoveListener(TKey pKey, Action<TValue> pAction)
{
Action<TValue> _cbs;
if (dic.TryGetValue(pKey, out _cbs))
{
_cbs = (Action<TValue>)Delegate.Remove(_cbs, pAction);
if (_cbs == null)
{
dic.Remove(pKey);
}
else
{
dic[pKey] = _cbs;
}
}
}
public bool HasListener(TKey pKey)
{
return dic.ContainsKey(pKey);
}
public void SendMessage(TKey pKey,TValue pValue)
{
Action<TValue> _cbs;
if (dic.TryGetValue(pKey, out _cbs))
{
_cbs.Invoke(pValue);
}
}
public void Clear()
{
dic.Clear();
}
}
全局事件的定义:
using System;
public enum EventType
{
Default = 0,
ValueChange = 1,
}
public class GlobalEvent
{
private static OneSender oneSender = new OneSender();
public static void AddListener(Enum eventType,Action<object> eventHandler)
{
oneSender.AddListener(eventType, eventHandler);
}
public static void RemoveListener(Enum eventType, Action<object> eventHandler)
{
oneSender.RemoveListener(eventType, eventHandler);
}
public static void SendMessage(Enum eventType, object pObj)
{
oneSender.SendMessage(eventType, pObj);
}
}
public class OneSender
{
private EventSender<Enum, object> sender = new EventSender<Enum, object>();
public void AddListener(Enum eventType, Action<object> eventHandler)
{
sender.AddListener(eventType, eventHandler);
}
public void RemoveListener(Enum eventType, Action<object> eventHandler)
{
sender.RemoveListener(eventType, eventHandler);
}
public void SendMessage(Enum eventType, object pObj)
{
sender.SendMessage(eventType, pObj);
}
}