デリゲートの考え方(5)
デリゲートの考え方(4)では、戻り値を持って、引数を持たないメソッドを見てきました。今回は、両方持つメソッドについて考えてみます。
public int Kick(string str)
{
Console.WriteLine($"{str}がキックでダメージを与えた");
return 10;
}
このメソッドのタイプは、どのようなものでしょうか?
- 戻り値は1つ。(int型が1つ)
- 引数が1つ。(string型が1つ)
このパターンですね。
次も同じパターンです。
public int Punch(string str)
{
Console.WriteLine($"{str}がパンチでダメージを与えた");
return 5;
}
変数を使う場合、まず、宣言が必要でしたね。
型名 変数名;
デリゲートに当てはめると、
Func<string, int> attack;
Funcが型名、attackが変数名です。(Func型は、戻り値がある場合のメソッドを指しています。この場合、Func<引数の型, 戻り値の型>となります。)
変数が宣言できたので、代入してみます。
attack = Kick;
呼び出しは、
attack(“falcon");
となります。
class Player
{
public int Kick(string str)
{
Console.WriteLine($"{str}がキックでダメージを与えた");
return 10;
}
public int Punch(string str)
{
Console.WriteLine($"{str}がパンチでダメージを与えた");
return 5;
}
public void Combo()
{
Func<string, int> attack;
// キックの場合
attack = Kick;
int damage = attack("falcon");
Console.WriteLine(damage);
// パンチの場合
attack = Punch;
damage = attack("raptor");
Console.WriteLine(damage);
}
}
表示
falconがキックでダメージを与えた
10
raptorがパンチでダメージを与えた
5
追記)このサンプルは、下記インスタンス化が必要です。
class Program
{
static void Main(string[] args)
{
Player falcon = new Player();
falcon.Combo();
}
}
ディスカッション
コメント一覧
まだ、コメントがありません