2009年12月7日月曜日

delegateは複数のメソッドを登録できるので、メソッドを追加したり削除したりする。
using System;

class MainClass
{
    //delegateを定義
    delegate int SampleDelegate(int a);

    class SampleClass
    {
        public int sampleMethod(int n)
        {
            return n + 1;
        }
        public int sampleMethod1(int n)
        {
            return n + 10;
        }
    }

    public static void Main()
    {
        // SampleClassのインスタンス化
        SampleClass s = new SampleClass();

        /* SampleDelegate型の変数delegateVar
         * SampleClasssampleMethodを代入 */
        SampleDelegate delegateVar = s.sampleMethod;

        // delegateVarsampleMethod1を追加
        delegateVar += s.sampleMethod1;

        // sampleMethodsampleMethod1を実行
        /* 最後に実行されたメソッド(sampleMethod1)
         * 戻り値とパラメータが返される
         * 出力値:11 */
        Console.WriteLine(delegateVar(1));

        // delegateVarからsampleMethod1を削除
        delegateVar -= s.sampleMethod1;

        // sampleMethodを実行
        // 出力値:2
        Console.WriteLine(delegateVar(1));
    }
}

0 コメント:

コメントを投稿