2012年11月23日金曜日

C# デリゲート2 (Actionってなに?)

Actionってなに?
前回の説明でデリゲートを使う場合は、
delegate void Attack(); 
という宣言が必要とのことだったけど、実は戻り値がvoidのようなデリゲートの関数は、.Net側で準備してあるのでわざわざ宣言しなくてもよいよというような機能。
それがAction
引数はなし~16個まで対応している。(.net4だと。)
なので、戻り値がvoidで引数が17個あるような関数の場合は自分で宣言する必要がある。
Actionの使い方は?
前回からの変更点として説明すると
まず、delegete~という宣言を削除する。
で以前delegete~を使っていた部分をActionに置き換える。
これでOK
ソース
前回のももたろうのサンプルだとこんな感じで書き換えることができる。
namespace MomoTaro
{
    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]; // 不要になった
            Action[] attacks = new Action[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("ケーン");
        }
    }
}
補足
Visual Studioの定義へ移動の機能でActionの定義を見てみると、
    public delegate void Action();
と定義されていることがわかる。
0 件のコメント:
コメントを投稿