您的位置:首页 > 编程语言 > C#

C#事件派发器

2020-02-02 09:54 1271 查看

事件派发器在监听想要监听的事件后,可以灵活的广播触发事件,可以使代码更加的调理化,易于阅读,符合开发者规范,话不多说,上代码:

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
  • 点赞
  • 收藏
  • 分享
  • 文章举报
Hugh-L 发布了14 篇原创文章 · 获赞 0 · 访问量 156 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: