c# - 如何在字典初始化中声明事件?
问题描述
我正在创建一个事件字典,我想在该字典的初始化中声明这些事件,而不是在其他地方声明它们并将链接放置到字典中。
static event EventDelegate Event1;
static event EventDelegate Event2;
static event EventDelegate Event3;
public enum EventTypes
{
Event1,
Event2,
Event3,
}
public static Dictionary<EventTypes, EventDelegate> events = new Dictionary<EventTypes, EventDelegate>
{
{EventTypes.Event1, Event1},
{EventTypes.Event2, Event2},
{EventTypes.Event3, Event3},
};
所以我想做这样的事情:
{EventTypes.Event1, new event EventDelegate Event1}
那可能吗?
解决方案
如何包装事件?
class MyEventWrapper
{
public event EventDelegate Handlers;
public void Raise(object sender, EventArgs args)
{
Handlers?.Invoke(sender, args);
}
}
//
Dictionary<EventTypes, MyEventWrapper> eventMap = new Dictionary<EventTypes, MyEventWrapper>
{
{ EventTypes.Event1, new MyEventWrapper() },
{ EventTypes.Event2, new MyEventWrapper() },
};
//
eventMap[EventTypes.Event1].Handlers += (s, a) => { };
eventMap[EventTypes.Event2].Handlers += (s, a) => { };
//
eventMap[EventTypes.Event1].Raise(this, new EventArgs());
推荐阅读
- c++ - 将特殊类型存储在向量中
- javascript - 如何根据属性对对象进行分组
- sql - PostgreSQL:基于连接列从另一个表更新目标表
- java - 在这种情况下如何防止 ArrayIndexOutOfBoundsException?
- apache - 连接到端口 8080 的 Apache 问题
- c++ - c++ 如何将 min() 和 max() 作为构造函数参数传递?
- android - 将 snapchat SDK 添加到 android 项目会导致检测测试失败并显示“未找到测试”
- javascript - 无法将动作创建者导出到组件 mapDispatchToProps 方法
- html - 在 HTML 表格列上添加链接
- flutter - 更改 TextField 颤动的选定文本颜色