注意点は、イベントを発行する前に if (null != MyEvent) { ... } のように
呼び出し元でイベントハンドラーが追加されていることを
必ず確認することです。
public class EventClass
{
public void DoSomething()
{
// イベントハンドラーの登録を確認します。
if (null != MyEvent)
{
MyEvent(this, new MyEventArgs("Occurred MyEvent"));
}
}
// イベントデリゲート
public delegate void MyEventHandler(object sender, MyEventArgs e);
// イベント
public event MyEventHandler MyEvent;
}
// EventArgs を継承して独自のイベントデータを定義します。
public class MyEventArgs : EventArgs
{
public MyEventArgs(string myVar)
{
this.myVar = myVar;
}
public string MyVar
{
get { return myVar; }
set { myVar = value; }
}
private string myVar;
}
// イベントを受け取る側の実装
EventClass eventClass = new EventClass();
// イベントハンドラーを追加します。
eventClass.MyEvent += delegate(object sender, MyEventArgs e)
{
MessageBox.Show(e.MyVar);
};
eventClass.DoSomething();
eventClass.MyEvent に追加したデリゲートが実行され、
メッセージボックスが表示されます。
ただ、今回のようにイベントの引数が object と EventArgs の派生クラスの
2 つで構成されるときは
System.EventHandler<TEventargs> デリゲートを使用し、
次のように書くこともできます。(1 ステップ減るだけですが)
public class EventClass
{
public void DoSomething()
{
if (null != MyEvent)
{
MyEvent(this, new MyEventArgs("Occurred MyEvent"));
}
}
public event EventHandler<MyEventArgs> MyEvent;
}
0 件のコメント:
コメントを投稿