ラムダ式でパラメータがある場合

ここではラムダ式でパラメータを必要とする例をみてみましょう。

パラメータがない場合の例は デリゲートに普通のメソッド、匿名メソッド、ラムダ式をそれぞれ利用する例 をみてください。

クリック時の TickCount を渡す

デリゲートに普通のメソッド、匿名メソッド、ラムダ式をそれぞれ利用する例」で作成した MyButton を次のように変更します。

using System;

namespace LambdaExp2
{
  public class MyButton
  {
    public delegate void OnClickDelegate(int tick);
    public OnClickDelegate OnClick;
    public void Click()
    {
      if (OnClick != null)
      {
        OnClick(Environment.TickCount);
      }
    }
  }
}

デリゲート OnClick は int を受け取ります。Click メソッドでは OnClick を呼び出すときに、TickCount を渡します。

ラムダ式を使って、デリゲートを定義して OnClick にセットする例は次のようになります。

using System;
using System.Threading;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LambdaExp2
{
  class Program
  {
    static void Main(string[] args)
    {
      // ラムダ式 1
      MyButton b1 = new MyButton();
      b1.OnClick += tick => Console.WriteLine("{0}: Clicked!", tick);

      b1.Click();

      Thread.Sleep(1000);

      b1.Click();

      // ラムダ式 2
      MyButton b2 = new MyButton();
      b2.OnClick += (int i) => Console.WriteLine("{0}: Clicked!", i);

      b2.Click();

    }
  }
}

実行結果は次のようになります。

32335840: Clicked!
32336838: Clicked!
32336838: Clicked!

最初の例では変数名のみラムダ式で宣言して利用しています。

Click メソッドを呼び出した後では、TickCount が変わったことがわかるように、少しスリープさせてから、もう一度 Click メソッドを呼び出しています。

二つめのラムダ式では (int i) として、型名をつけて変数を宣言しています。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 C# 入門