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
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- (转)C# 中的委托和事件(详解)2-委托和方法的异步调用
- C# 中的委托和事件
- [C#基础知识]之.netframerwork中的事件
- C#中回车键事件写法
- C#事件演示程序4)——一段经典的代码
- C#处理窗体的最小化事件及恢复正常窗体事件
- C# 事件 订阅与发布
- c#创建自定义控件并给控件添加事件
- Visual C#.Net 重写事件.
- C# 委托与事件详解(三)
- 理解C#中的委托和事件
- C#Selenium学习(五)-事件
- C# 委托和事件
- C#窗口拦截键盘事件
- C# 事件机制
- [C# 基础知识系列]专题四:事件揭秘
- C#事件不必要的臃肿
- [C# 基础知识系列]专题四:事件揭秘
- 根据C# 事件思想来实现 php 事件
- 浅析C#的事件处理和自定义事件_C#教程