Top > .NET Visual C#言語入門 > デリゲートサンプル
プログラム構造 列挙型(enum) コンストラクタ・デストラクタ
スケルトン 配列 メソッド
クラス内の記述構成 構造体 プロパティ
HalloWorld 修飾子 静的クラスと静的メンバ
コマンドライン引数 プリプロセッサ ディレクティブ フィールド
コメント 例外と例外処理 演算子のオーバーロード
ステートメント(文) 可変個引数リスト(params) イベント(割り込み)
式(演算子) 名前空間 デリゲート
変数とデータ型 クラスとオブジェクト インデクサ
型変換(キャスト) クラス(class) デリゲート&イベント発生と受信サンプル
定数(Const/Readonly) 部分クラス定義  
文字列(string) 継承  

デリゲートサンプル

デリゲート&イベント発生と受信のサンプル

イベントとは、関連するオブジェクトで、重要な事象が発生したとき、非同期で通知すること。

クラスを提供する際、何らかの重要な事象が発生したとき、イベントを発行して通知する必要がある場合があります。そのための、イベント発生側クラスとイベント受信側クラスの関係を最小限のコードで解説します。

Main

public class AlarmDriver
{
    public static void Main(string[] args)
    {
        Recv a = new Recv(); ①
    }
}
  1. Recvクラスをインスタンス化すると、Recvオブジェクトのコンストラクタが自動で呼び出される。
イベント受信側クラス
public class Recv
{
    Send s;

    public Recv()
    {
        s = new Send(); ①
        s.Alarm += new QuitEventHandler(this.Quit); ②
        s.EventQUIT(); ③
    }

    public void Quit(object sender) ④
    {
        Console.WriteLine("QUIT");
    }
}
  1. コンストラクタの実行

    ① イベント発行を行うSendクラスをインスタンス化する

    ② イベントを受信するQuit()メソッドを引数にして、QuitEventHandlerをインスタンス化し、SendオブジェクトのAlarmイベントリストに追加する

    ③ イベント発行のテストのために、SendオブジェクトのEventQUITのメソッドを呼び出し、Sendオブジェクトよりイベントを強制発行する。本来この処理 は、イベント発行側で行う。
     

  2. ④ Sendオブジェクトよりイベントが発行されると、Quit()メソッドが実行される。
    実際は、SendオブジェクトよりQuit()メソッドがコールバックされる

イベント発行側クラス

public delegate void QuitEventHandler(object sender); ①

public class Send
{
    public event QuitEventHandler Alarm; ②

    public void EventQUIT() ③
    {
        Alarm(this);
    }
}
  1. QuitEventHandlerのdelegateを宣言
  2. QuitEventHandlerをAlarmをイベントとして宣言
  3. EventQUIT()メソッドが呼び出されると、Alarmイベントを発行

▲ページトップに戻る

【本を読んでもよくらからない】 … 個別指導でわかりやすくお教えします