Loading [MathJax]/extensions/tex2jax.js

2012年11月21日水曜日

C# デリゲート

デリゲートってなに?
関数を変数みたいに使いたいときに使う機能のこと。
どうやって使う?
変数みたいに使いたい関数をこんな感じで定義しておく。
  1. delegate void Attack();  
そうすると、この例でいうとAttackを型として使える。 Attack型にはAttackと引数と戻り値が一致する関数がなんでも代入できる。この例でいうと引数が0で戻り値がvoidのものを代入できる。
参考ソースの説明
犬、猿、キジに攻撃させるというソースを考えてみました。 Attack型の配列を作ってそこにそれぞれのAttackを代入しておき、最後に使うということをしてます。
コード
  1. class Program  
  2. {  
  3.     static void Main(string[] args)  
  4.     {  
  5.         // 3人をお供に加える。  
  6.         Dog dog = new Dog();  
  7.         Monkey monkey = new Monkey();  
  8.         Kiji kiji = new Kiji();  
  9.   
  10.         // 攻撃の作戦をたてる  
  11.         Attack[] attacks = new Attack[3];  
  12.         attacks[0] = dog.Attack;  
  13.         attacks[1] = monkey.Attack;  
  14.         attacks[2] = kiji.Attack;  
  15.   
  16.         // 攻撃する  
  17.         for (int i = 0; i < attacks.Length; i++ )  
  18.         {  
  19.             attacks[i]();  
  20.         }  
  21.   
  22.         Console.ReadLine();  
  23.     }  
  24. }  
  25.   
  26. delegate void Attack();  
  27.   
  28. class Dog  
  29. {  
  30.     public void Attack()  
  31.     {  
  32.         Console.WriteLine("BowWow");  
  33.     }  
  34. }  
  35. class Monkey  
  36. {  
  37.     public void Attack()  
  38.     {  
  39.         Console.WriteLine("ウキー");  
  40.     }  
  41. }  
  42. class Kiji  
  43. {  
  44.     public void Attack()  
  45.     {  
  46.         Console.WriteLine("ケーン");  
  47.     }  
  48. }  
0 件のコメント:
コメントを投稿