独自のイベント引数を作る

プログラミングC# 第6版 5.8


イベントの続きです。

前回キャンセル用のイベント引数CancelEventArgsについて勉強しましたが、このイベント引数は独自に定義することもできます。

というわけでCancelEventArgsと同じくCancelを持つ独自のイベント引数を作ってみます。

using System;

// EventArgsから派生すること
class MyEventArgs : EventArgs {
    public bool Cancel;
}

class CClass {
    // MyEventArgsを指定
    public event EventHandler<MyEventArgs> Begin;
    
    public void Proc () {
        if ( Begin != null ) {
            // MyEventArgsを渡す
            MyEventArgs ce = new MyEventArgs();
            Begin(this,ce);
            
            // イベント中にキャンセルが発生していたらProcの処理を中断する
            if ( ce.Cancel == true ) {
                Console.WriteLine("CClass.Proc Cancel");
                return;
            }
        }
        
        Console.WriteLine("CClass.Proc");
    }
}

class Program {
    static void Main () {
        CClass cobj = new CClass();
        
        cobj.Begin += (sender,e) => {
            Console.WriteLine("Begin1");
        };
        cobj.Begin += (sender,e) => {
            Console.WriteLine("Begin2");
            // キャンセル発生!
            e.Cancel = true;
        };
        cobj.Proc();
    }
}
$ main
Begin1
Begin2
CClass.Proc Cancel

できました。非常に簡単ですね。