C# 入門

ホーム > ラムダ式 > デリゲートに普通のメソッド、匿名メソッド、ラムダ式をそれぞれ利用する例

デリゲートに普通のメソッド、匿名メソッド、ラムダ式をそれぞれ利用する例

ここでは C# のデリゲート、匿名メソッド、ラムダ式などの復習も兼ねて、 いろいろな方法でデリゲートを定義します。

自信のないところは、復習しつつ読み進んでみてください。

MyButton クラスでデリゲートを定義

まず、次のような MyButton クラスを定義します。

namespace LambdaExp1
{
  public class MyButton
  {
    public delegate void OnClickDelegate();
    public OnClickDelegate OnClick;
    public void Click()
    {
      if (OnClick != null)
      {
        OnClick();
      }
    }
  }
}

ここでは OnClickDelegate というデリゲート型を定義して、OnClickDelegate 型の OnClick を宣言しています。

また、"ボタン" らしく、Click メソッドを定義していて、この中で OnClick を呼び出しています。

デリゲートってなんだっけ?という人は「デリゲート」を確認してください。

さて、上で定義した MyButton を利用するコードを書きます。

MyButton オブジェクト b1, b2, b3, b4 でそれぞれ異なる方法でデリゲートをセットしています。

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

namespace LambdaExp1
{
  class Program
  {
    static void Main(string[] args)
    {
      // 普通の名有りメソッド (1) デリゲートを明示的に作成
      MyButton b1 = new MyButton();
      b1.OnClick += new MyButton.OnClickDelegate(Foo);

      b1.Click();

      // 普通の名有りメソッド (2) - C# 2.0 でのシンタックス変更
      MyButton b2 = new MyButton();
      b2.OnClick += Bar;

      b2.Click();

      // 匿名メソッド
      MyButton b3 = new MyButton();
      b3.OnClick += delegate()
      {
        Console.WriteLine("Hey!");
      };

      b3.Click();

      // ラムダ式
      MyButton b4 = new MyButton();
      b4.OnClick += () => Console.WriteLine("Hello!");

      b4.Click();
    }

    static void Foo()
    {
      Console.WriteLine("Konnichiwa!");
    }

    static void Bar()
    {
      Console.WriteLine("Ohayo!");
    }

  }
}

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

Konnichiwa!
Ohayo!
Hey!
Hello!
ホーム > ラムダ式 > デリゲートに普通のメソッド、匿名メソッド、ラムダ式をそれぞれ利用する例