我有一份相同的(签名方式)事件列表(25 +):
public class SourceOfManyEvents {
public event Action<EventInfo> FirstEvent = delegate { };
public event Action<EventInfo> SecondEvent = delegate { };
{...}
}
我知道将使用相同的签名将更多事件添加到课程中。我很想在事件触发时进行一些日志记录,所以我想将所有事件绑定到一个记录事件处理程序,如下所示:
// PSEUDO-CODE WARNING! :D
// PSEUDO-CODE WARNING! :D
// PSEUDO-CODE WARNING! :D
public void BindToAllEvents(SourceOfManyEvents source) {
var events = typeof(SourceOfManyEvents).GetEvents();
foreach (var e in events) {
e.BindToEvent(source, GenericEventHandler);
}
}
public void GenericEventHandler(EventInfo info) {
// do some logging here
}
有没有办法使用.Net 4&amp; C#?
答案 0 :(得分:2)
这样的东西?
public static void GenericEventHandler(EventInfo info)
{
// do some logging here
}
public static void Bind(SourceOfManyEvents s)
{
foreach (var e in typeof(SourceOfManyEvents).GetEvents())
{
e.AddEventHandler(s, (Action<EventInfo>)GenericEventHandler);
}
}
答案 1 :(得分:0)
这绝对是可能的,你也可能必须使用反射来做到这一点。 我不完全确定这是正确的,因为它已经有一段时间了,因为我使用反射,但我会尝试这个:
var events = typeof(SourceOfManyEvents).GetEvents();
foreach (var e in events) {
e.AddEventHandler(source, (Action<EventInfo>) GenericEventHandler);
}