デリゲートってなに?
関数を変数みたいに使いたいときに使う機能のこと。どうやって使う?
変数みたいに使いたい関数をこんな感じで定義しておく。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 件のコメント:
コメントを投稿