デリゲートは、メソッドのアドレスを割り当てることができます。デリゲートを通じて
メソッドを呼び出すことができます。デリゲートには、複数のメソッドを割り当てることにより、連続してメソッドを呼び出すことも可能です。また、デリゲートは後の章で解説する「イベント」とも深い関係があります。
デリゲートは次のように宣言します。
delegate 戻り値の型 デリゲート名(パラメータリスト);戻り値の型とパラメータリストの一致するメソッドがデリゲートに登録することができます。具体的には、次のようにします。
delegate int MyDelegate(int x); .... MyDelegate md = new MyDelegate(メソッド名);デリゲートをインスタンス化する際、引数にメソッド名を指定すればよいのです。
デリゲートはみんなから見える位置に宣言する必要があります。
では、簡単な例を見てみましょう。
// delegate01.cs using System; delegate void MyDelegate(string str); class MyClass { public void show(string s) { Console.WriteLine(s + "です。"); } } class delegate01 { public static void Main() { MyClass mc = new MyClass(); MyDelegate md = new MyDelegate(mc.show); md("よい天気"); } }実行結果は次のようになります。
この例では、Mainメソッドのあるクラス外のインスタンスメソッドのアドレスを
デリゲートに格納しましたが、staticなメソッドでも大丈夫です。
次は、Mainメソッドのあるクラスのstaticなメソッドをデリゲートで呼び出します。
// delegate02.cs using System; delegate int Add(int x, int y); class delegate02 { static int Calc(int a, int b) { return a + b; } public static void Main() { Add add = new Add(Calc); Console.WriteLine("3 + 10 = {0}", add(3, 10)); } }実行結果は次のようになります。
Update 20/Sep/2006 By Y.Kumei