デリゲートの考え方(3)

2021年4月23日

デリゲートの考え方(2)では、引数を1つ持つメソッドを見てきました。今回は、さらに進んで、引数を2つ持つメソッドについて考えます。

public void Kick(string str1, string str2)
{
    Console.WriteLine($"{str1}と{str2}のキック");
}

このメソッドのタイプは、どのようなものでしょうか?

  • 戻り値がありません。
  • 引数が2つ(string型が2つ)

このパターンですね。

次も同じパターンです。

public void Punch(string str1, string str2)
{
    Console.WriteLine($"{str1}と{str2}のパンチ");
}

変数を使う場合、まず、宣言が必要でしたね。

型名 変数名;

デリゲートに当てはめると、

Action<string, string> attack;

Actionが型名、attackが変数名です。(Action型は、戻り値がない場合のメソッドを指しています)
string型の引数が2つ必要なので<string, string>の2つを用意します。

変数が宣言できたので、代入してみます。

attack = Kick;

呼び出しは、

attack(“falcon", “raptor");

となります。

また、+=演算子で、同時に複数のメソッドw追加することもできます(マルチキャストデリゲート)

attack += Punch;

まとめると、

class Player
{
    public void Kick(string str1, string str2)
    {
        Console.WriteLine($"{str1}と{str2}のキック");
    }
    public void Punch(string str1, string str2)
    {
        Console.WriteLine($"{str1}と{str2}のパンチ");
    }
    public void Combo()
    {
        Action<string, string> attack;
        attack = Kick;
        attack += Punch;
        attack("falcon", "raptor");
    }
}

表示

falconとraptorのキック
falconとraptorのパンチ

追記)このサンプルは、下記インスタンス化が必要です。

class Program
{
    static void Main(string[] args)
    {
        Player falcon = new Player();
        falcon.Combo();
    }
}

C#

Posted by hidepon