1

C# イベントを指定するためだけのクラスがあり、このクラスをアプリケーションに渡すとします。

public class MyEvents
{
    public event MyEventHandler OnBeforeSomeAction;
    public event MyEventHandler OnSomeAction;
}

これらのイベントを呼び出すには、クラス自体から呼び出す必要があります。MyEventsアプリケーションに渡されるときに他のクラスがこれらのイベントをトリガーできるようにする簡単な方法は、パブリック トリガー関数を作成することです。

public class MyEvents
{
    public event MyEventHandler OnBeforeSomeAction;
    public event MyEventHandler OnSomeAction;

    public void TriggerOnBeforeSomeAction()
    {
        OnBeforeSomeAction();
    }

    public void TriggerOnSomeAction()
    {
        OnSomeAction();
    }
}

ただし、このクラスに多くのイベントがある場合は、多くのトリガー メソッドも必要になります。リフレクションを使用してイベントを取得し、トリガーする方法はありますか? このようなもの:

public class MyEvents
{
    public event MyEventHandler OnBeforeSomeAction;
    public event MyEventHandler OnSomeAction;

    public void TriggerEvent(string eventName)
    {
        var event = // some magic reflection.
        event.Invoke();
    }
}
4

1 に答える 1

2

まさにあなたが望むもの -この素晴らしいページからの引用....

    public void TriggerEvent(string handler, EventArgs e)
    {
        MulticastDelegate eventDelegate =
              (MulticastDelegate)this.GetType().GetField(handler,
               System.Reflection.BindingFlags.Instance |
               System.Reflection.BindingFlags.NonPublic).GetValue(this);

        Delegate[] delegates = eventDelegate.GetInvocationList();

        foreach (Delegate dlg in delegates)
        {
            dlg.Method.Invoke(dlg.Target, new object[] { this, e });
        } 
    }
于 2012-10-09T21:17:13.667 に答える