在特定场景下我们需要使用到字典类型的Action 事件。这样来解决业务场景问题。但是当我们直接使用
private Dictionary<T, event Action> dictionaryOfEvents;
来写代码时显然是会报错的。这个时候我们可以换一个解决思路。不如声明一个委托,这样就可以达到我们的目的。一段示例代码如下:
public delegate void CALLBACK(string msg);
private ConcurrentDictionary<string, CALLBACK> _callBack;
public void AddCallBack(string methodName,CALLBACK callBack)
{
if (string.IsNullOrEmpty(methodName) || callBack != null)
return;
_callBack.AddOrUpdate(methodName, callBack, (k, v) => { return v += callBack; });
}
说明
C# 不允许直接把字典声明为 event(event 只能是委托类型)。要实现"按 key 分发的多播事件",可先定义委托,再用并发字典保存回调集合。
- 定义委托:public delegate void CALLBACK(string msg);
- 保存:ConcurrentDictionary<string, CALLBACK>。
- 注册时用 += 累加,触发时取对应委托调用(注意判空)。
- 用 ConcurrentDictionary 可避免并发注册时的线程安全问题。