柚子快报邀请码778899分享:最简洁的泛型c#消息机制

http://www.51969.com/

using System;using System.Collections;public class EventSystem { public delegate void ListenerDelegate(); public delegate void ListenerDelegate(T t); public delegate void ListenerDelegate(T1 t1, T2 t2); public delegate void ListenerDelegate(T1 t1, T2 t2, T3 t3); private Hashtable listeners = new Hashtable(); #region Addlistener public void AddListener(string eventName, ListenerDelegate listener) { ListenerDelegate listenerDelegate = listeners[eventName] as ListenerDelegate; listenerDelegate = (ListenerDelegate)Delegate.Combine(listenerDelegate, listener); listeners[eventName] = listenerDelegate; } public void AddListener(string eventName, ListenerDelegate listener) { ListenerDelegate listenerDelegate = listeners[eventName] as ListenerDelegate; listenerDelegate = (ListenerDelegate)Delegate.Combine(listenerDelegate, listener); listeners[eventName] = listenerDelegate; } public void AddListener(string eventName, ListenerDelegate listener) { ListenerDelegate listenerDelegate = listeners[eventName] as ListenerDelegate; listenerDelegate = (ListenerDelegate)Delegate.Combine(listenerDelegate, listener); listeners[eventName] = listenerDelegate; } public void AddListener(string eventName, ListenerDelegate listener) { ListenerDelegate listenerDelegate = listeners[eventName] as ListenerDelegate; listenerDelegate = (ListenerDelegate)Delegate.Combine(listenerDelegate, listener); listeners[eventName] = listenerDelegate; } #endregion #region RemoveListener public void RemoveListener(string eventName, ListenerDelegate listener) { Delegate remove = Delegate.Remove(listeners[eventName] as ListenerDelegate, listener); SetRemoveValue(eventName, remove); } public void RemoveListener(string eventName, ListenerDelegate listener) { var remove = Delegate.Remove(listeners[eventName] as ListenerDelegate, listener); SetRemoveValue(eventName, remove); } public void RemoveListener(string eventName, ListenerDelegate listener) { Delegate remove = Delegate.Remove(listeners[eventName] as ListenerDelegate, listener); SetRemoveValue(eventName, remove); } public void RemoveListener(string eventName, ListenerDelegate listener) { Delegate remove = Delegate.Remove(listeners[eventName] as ListenerDelegate, listener); SetRemoveValue(eventName, remove); } private void SetRemoveValue(string eventName, Delegate remove) { if (remove == null) { listeners.Remove(eventName); } else { listeners[eventName] = remove; } } #endregion public void RemoveAllListener(string eventName) { listeners.Remove(eventName); } public void Dispatch(string eventName) { if (listeners.ContainsKey(eventName)) { ListenerDelegate listenerDelegate = listeners[eventName] as ListenerDelegate; listenerDelegate(); } } public void Dispatch(string eventName, T t) { if (listeners.ContainsKey(eventName)) { ListenerDelegate listenerDelegate = listeners[eventName] as ListenerDelegate; listenerDelegate(t); } } public void Dispatch(string eventName, T1 t1, T2 t2) { if (listeners.ContainsKey(eventName)) { ListenerDelegate listenerDelegate = listeners[eventName] as ListenerDelegate; listenerDelegate(t1, t2); } } public void Dispatch(string eventName, T1 t1, T2 t2, T3 t3) { if (listeners.ContainsKey(eventName)) { ListenerDelegate listenerDelegate = listeners[eventName] as ListenerDelegate; listenerDelegate(t1, t2, t3); } }}

 

最多支持3个参数,再多我认为要写结构体了

Delegate.Combine和+= 是有区别的   https://www.coder.work/article/1627775

柚子快报邀请码778899分享:最简洁的泛型c#消息机制

http://www.51969.com/

查看原文