c# delegate デリゲート

デリゲートは、メソッドを抽象化したもので、1つのメソッドから成るインタフェースに近いものですが、専用の型を用意することでより使いやすくなっています。

デリゲートの使い方は以下の通り、簡単です。

static void TimerTest()
{
  TimerTestPublish pub = new TimerTestPublish();
  TimerTestSubscriber a = new TimerTestSubscriber("a");
  TimerTestSubscriber b = new TimerTestSubscriber("b");
  // ↓ デリゲートを作成して追加
  pub.Fire += new TimerTestPublish.FireHandler(a.Fire);
  // ↓ デリゲートを作成して追加
  pub.Fire += new TimerTestPublish.FireHandler(b.Fire);
  pub.Run();

  Console.WriteLine("Finished");
  // ↓ event では エラー
  pub.Fire = new TimerTestPublish.FireHandler(a.Fire);
  // ↓ event では エラー
  pub.Fire();
}

class TimerTestPublish
{
  public delegate void FireHandler(); // デリゲートの型宣言
  public FireHandler Fire; // デリゲートのインスタンス変数
  // public event FireHandler Fire;

  public void Run()
  {
    for (int i = 0; i < 3; ++ i)
    {
      Thread.Sleep(1000);
      if (Fire != null)
        Fire(); // デリゲートの呼び出し方法
    }
  }
};

class TimerTestSubscriber
{
  private string name;

  public TimerTestSubscriber(string name)
  {
    this.name = name;
  }
  public void Fire()
  {
    Console.WriteLine(name + " - Fired");
  }
};

デリゲートは最初 null ですが、+= でデリゲートを追加できるようです。
デリゲートを加算すると、両方のデリゲートを呼び出すデリゲートになります。

となりのページ

このサイトについて

このサイトのページへのリンクは自由に行っていただいてかまいません。
このサイトで公開している全ての画像、プログラム、文書の無断転載を禁止します。

連絡先

ここをクリック すると表示されるページから作者へメールで連絡できます。

共有