事件派发器在监听想要监听的事件后,可以灵活的广播触发事件,可以使代码更加的调理化,易于阅读,符合开发者规范,话不多说,上代码:
using System;
using System.Collections;
using System.Collections.Generic;
public class EventManager
{
private static Dictionary<EventType, Delegate> EventDic = new Dictionary<EventType, Delegate>();
#region 添加侦听
//none parameter
public static void AddListenr(EventType eventType, DelegateCallBack delegateCallBack)
{
if (!EventDic.ContainsKey(eventType))
{
EventDic[eventType] = delegateCallBack;
}
else
{
EventDic[eventType] = (DelegateCallBack)EventDic[eventType] + delegateCallBack;
}
}
//one parameter
public static void AddListenr<T>(EventType eventType, DelegateCallBack<T> delegateCallBack)
{
if (!EventDic.ContainsKey(eventType))
{
EventDic[eventType] = delegateCallBack;
}
else
{
EventDic[eventType] = (DelegateCallBack<T>)EventDic[eventType] + delegateCallBack;
}
}
//two parameter
public static void AddListenr<T, X>(EventType eventType, DelegateCallBack<T,X> delegateCallBack)
{
if (!EventDic.ContainsKey(eventType))
{
EventDic[eventType] = delegateCallBack;
}
else
{
EventDic[eventType] = (DelegateCallBack<T,X>)EventDic[eventType] + delegateCallBack;
}
}
#endregion
#region 移出侦听
//none parameter
public static void RemoveListener(EventType eventType, DelegateCallBack delegateCallBack)
{
if (EventDic.ContainsKey(eventType))
{
//是否存在对应参数的代理
EventDic[eventType] = (DelegateCallBack)EventDic[eventType] - delegateCallBack;
}
}
//one parameter
public static void RemoveListener<T>(EventType eventType, DelegateCallBack<T> delegateCallBack)
{
if (EventDic.ContainsKey(eventType))
{
//是否存在对应参数的代理
EventDic[eventType] = (DelegateCallBack<T>)EventDic[eventType] - delegateCallBack;
}
}
//two parameter
public static void RemoveListener<T,X>(EventType eventType, DelegateCallBack<T,X> delegateCallBack)
{
if (EventDic.ContainsKey(eventType))
{
//是否存在对应参数的代理
EventDic[eventType] = (DelegateCallBack<T,X>)EventDic[eventType] - delegateCallBack;
}
}
#endregion
#region 广播事件
//none parameter
public static void BrocastEvent(EventType eventType)
{
if (EventDic.ContainsKey(eventType))
{
DelegateCallBack delegateCallBack = (DelegateCallBack)EventDic[eventType];
delegateCallBack();
}
}
//one parameter
public static void BrocastEvent<T>(EventType eventType,T arg1)
{
if (EventDic.ContainsKey(eventType))
{
DelegateCallBack<T> delegateCallBack = (DelegateCallBack<T>)EventDic[eventType];
delegateCallBack(arg1);
}
}
//two parameter
public static void BrocastEvent<T,X>(EventType eventType, T arg1,X arg2)
{
if (EventDic.ContainsKey(eventType))
{
DelegateCallBack<T,X> delegateCallBack = (DelegateCallBack<T,X>)EventDic[eventType];
delegateCallBack(arg1,arg2);
}
}
#endregion
}
#region 代理回调
public delegate void DelegateCallBack();
public delegate void DelegateCallBack<T>(T arg1);
public delegate void DelegateCallBack<T,X>(T arg1,X arg2);
public delegate void DelegateCallBack<T,X,Y>(T arg1,X arg2,Y arg3);
public delegate void DelegateCallBack<T,X,Y,Z>(T arg1,X arg2,Y arg3,Z arg4);
#endregion
#region 事件类型
public enum EventType
{
eventType1,
eventType2,
eventType3,
}
#endregion