2012年11月21日水曜日

C# デリゲート

デリゲートってなに?
関数を変数みたいに使いたいときに使う機能のこと。
どうやって使う?
変数みたいに使いたい関数をこんな感じで定義しておく。
delegate void Attack();
そうすると、この例でいうとAttackを型として使える。 Attack型にはAttackと引数と戻り値が一致する関数がなんでも代入できる。この例でいうと引数が0で戻り値がvoidのものを代入できる。
参考ソースの説明
犬、猿、キジに攻撃させるというソースを考えてみました。 Attack型の配列を作ってそこにそれぞれのAttackを代入しておき、最後に使うということをしてます。
コード
    class Program
    {
        static void Main(string[] args)
        {
            // 3人をお供に加える。
            Dog dog = new Dog();
            Monkey monkey = new Monkey();
            Kiji kiji = new Kiji();

            // 攻撃の作戦をたてる
            Attack[] attacks = new Attack[3];
            attacks[0] = dog.Attack;
            attacks[1] = monkey.Attack;
            attacks[2] = kiji.Attack;

            // 攻撃する
            for (int i = 0; i < attacks.Length; i++ )
            {
                attacks[i]();
            }

            Console.ReadLine();
        }
    }

    delegate void Attack();

    class Dog
    {
        public void Attack()
        {
            Console.WriteLine("BowWow");
        }
    }
    class Monkey
    {
        public void Attack()
        {
            Console.WriteLine("ウキー");
        }
    }
    class Kiji
    {
        public void Attack()
        {
            Console.WriteLine("ケーン");
        }
    }
0 件のコメント:
コメントを投稿