如何将对象中的所有事件动态绑定到EventHandler?

时间:2010-07-30 12:52:12

标签: c# .net

我有一份相同的(签名方式)事件列表(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#?

2 个答案:

答案 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);
}