デリゲートってなに?
関数を変数みたいに使いたいときに使う機能のこと。
どうやって使う?
変数みたいに使いたい関数をこんな感じで定義しておく。
delegate void Attack();
そうすると、この例でいうとAttackを型として使える。
Attack型にはAttackと引数と戻り値が一致する関数がなんでも代入できる。この例でいうと引数が0で戻り値がvoidのものを代入できる。
参考ソースの説明
犬、猿、キジに攻撃させるというソースを考えてみました。
Attack型の配列を作ってそこにそれぞれのAttackを代入しておき、最後に使うということをしてます。
コード
- class Program
- {
- static void Main(string[] args)
- {
-
- 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("ケーン");
- }
- }
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 件のコメント:
コメントを投稿