2017年5月11日木曜日

C# デリゲート(delegate)の利用方法

C# の delegate はメソッドを参照するクラスで、delegate オブジェクトに呼び出し対象のメソッドを割り当てておくと、delegate オブジェクト経由でメソッドを呼び出すことができます。
delegate という単語は「委譲」という意味からも、その役割がイメージできると思います。メソッドを delegate に複数割り当てることで、複数処理をまとめることもできます。

1つの delegate オブジェクトに 1 つのメソッドを割り当てる例です。

public partial class Form1 : Form
{
    public delegate void myDelegate(string _text);

    private void button1_Click(object sender, EventArgs e)
    {
        // new 演算子でデリゲートオブジェクトを生成
        myDelegate myDel = new myDelegate(myFunc1);
        // メソッドの呼び出し
        myDel("テストデリゲート 1");
        // 暗黙的にデリゲートオブジェクトを生成
        myDelegate myDel2 = myFunc1;
        // メソッドの呼び出し
        myDel2("テストデリゲート 2");
    }

    private void myFunc1(string textArg)
    {
        Debug.WriteLine(textArg);
    }
}

続いて、1 つの delegate に複数のメソッドを登録する例です。複数のメソッド登録には += 演算子を利用します。また、delegate ではインスタンスメソッド、static メソッドを取ることができます。下記では myStaticFunc1 という static メソッドも登録しています。

public partial class Form1 : Form
{
    public delegate void myDelegate(string _text);

    private void button1_Click(object sender, EventArgs e)
    {
        // 複数のメソッドをデリゲート
        myDelegate myDel = new myDelegate(myFunc1);
        myDel += myFunc2;
        myDel += myStaticFunc1;
        myDel("複数呼び出し");
    }

    private void myFunc1(string textArg)
    {
        Debug.WriteLine(textArg);
    }

    private void myFunc2(string textArg)
    {
        Debug.WriteLine(textArg);
    }

    private static void myStaticFunc1(string textArg)
    {
        Debug.WriteLine(textArg);
    }
}

参考:
MSDN - Delegate クラス

リンク:
C# プログラミング

0 件のコメント:

コメントを投稿