デリゲートは、メソッドを抽象化したもので、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 ですが、+= でデリゲートを追加できるようです。
デリゲートを加算すると、両方のデリゲートを呼び出すデリゲートになります。
このサイトのページへのリンクは自由に行っていただいてかまいません。
このサイトで公開している全ての画像、プログラム、文書の無断転載を禁止します。
ここをクリック
すると表示されるページから作者へメールで連絡できます。