読者です 読者をやめる 読者になる 読者になる

イベントに登録したデリゲートの呼び出し順を操作する

.net

MulticastDelegate クラスの GetInvocationList メソッドで、イベントに登録されているデリゲートのリストが取得できる。知らなかったのでメモ(. .)φメモメモ

class Program
{
    public event EventHandler Sample;

    public void FireSample()
    {
        OnSample(EventArgs.Empty);
    }

    protected void OnSample(EventArgs e)
    {
        // Sample イベントに登録されているデリゲートのリストを
        // 呼び出し順に取得
        Delegate[] methods = Sample.GetInvocationList();  

        // 逆順に呼び出す
        for (int i = methods.Length - 1; 0 <= i; i--)
        {
            EventHandler method = (EventHandler)methods[i];
            method(this, e);
        }
    }

    static void Main(string[] args)
    {
        Program p = new Program();
        p.Sample += delegate
        {
            Console.WriteLine("1番目に登録");
        };
        p.Sample += delegate
        {
            Console.WriteLine("2番目に登録");
        };
        p.Sample += delegate
        {
            Console.WriteLine("3番目に登録");
        };

        p.FireSample();

        Console.ReadLine();
    }
}

デリゲートの呼び出し順を変更したい場面がたま〜にあるので、これは便利かも。