有一种方法可以一次分配多个事件处理程序,不需要反射,但它不是微不足道的,并且需要一些编程。如果你想在循环中初始化它们,你可以使用字典来存储你的事件。
附带说明:按照惯例,event
仅当委托类型为 时才应使用关键字EventHandler
。当其他人尝试使用它时,它可能会而且很可能会混淆。
Hoge
班级:
public class Hoge
{
// A dictionary to store your events.
private Dictionary<string, EventHandler> events = new Dictionary<string, EventHandler>()
{
{ "EventA", null },
{ "EventB", null },
{ "EventC", null }
};
// Event add/remove accessors.
public event EventHandler EventA
{
add
{
lock (events)
{
events["EventA"] += (EventHandler)events["EventA"] + value;
}
}
remove
{
lock (events)
{
events["EventA"] += (EventHandler)events["EventA"] - value;
}
}
}
// You can do the same for other events.
public event EventHandler EventB;
public event EventHandler EventC;
public Hoge()
{
// Initialize events in a loop.
foreach (var key in events.Keys.ToList())
{
events[key] += FugaMethod;
}
}
// Raises EventA.
public void RaiseEventA()
{
EventHandler handler;
if (null != (handler = (EventHandler)events["EventA"]))
{
handler(this, EventArgs.Empty);
}
}
// Event handler.
private void FugaMethod(object sender, EventArgs e)
{
Console.WriteLine("Hello.");
}
}
用法:
class Program
{
static void Main(string[] args)
{
new Hoge().RaiseEventA();
}
}
如何:使用字典存储事件实例(C# 编程指南)
处理和引发事件