2009年12月27日日曜日

Delegateに2つのMethodをいくつかの演算子を使用して、それぞれの方法で追加したり解除したりしてみる。

using System;


delegate void Sample(int n);


class MainClass
{
    class SampleClass
    {
        public void Method1(int n)
        {
            Console.WriteLine(n);
        }


        public void Method2(int n)
        {
            Console.WriteLine(++n);
        }
    }


    public static void Main()
    {
        SampleClass sample = new SampleClass();
        // Method1を登録
        Sample del1 = sample.Method1;
        // del1にMethod2も登録
        del1 += sample.Method2;
        // 出力値:0 1
        del1(0);


        /* Method1とMethod2を同時に登録 エラー
         * メソッドグループとメソッドグループで
         * +演算子を使用することはできないみたい
        Sample del2 =
         sample.Method1 + sample.Method2; */


        /* Method1とMethod2をそれぞれdel3,del4に
         * 登録して+演算子を利用する */
        Sample del3 = sample.Method1;
        Sample del4 = sample.Method2;
        // 呼び出されるMethodの順番を確認
        Sample del5 = del4 + del3;
        // 出力値:1 0
        del5(0);


        // del1からMethod1を解除
        del1 -= sample.Method1;
        // 出力値:1
        del1(0);
        // del5からMethod2を解除
        del5 -= sample.Method2;
        // 出力値:0
        del5(0);
    }
}

0 コメント:

コメントを投稿