C# 入門

ホーム > イベント > イベントの実装方法

イベントの実装方法

ここではイベントの実装方法を説明します。

デリゲートが基本になるので、デリゲートについて理解していない人は先に当サイトの「デリゲート」 に目を通しておくと良いでしょう。

逆にデリゲートさえ理解しておけば、イベントを理解することは簡単です。

イベントの実装方法

プレーンなデリゲートによる実装では、インボケーションリストが暗黙的にクリアされる問題と外部からデリゲートを呼び出せる問題がありました。 この問題については「なぜ event キーワードを指定するのか?」をみてください。

こうした問題があるので、イベントを定義する場合にはデリゲートに event キーワードを付与します。

例えば次のようにします。

namespace EventTest1
{
  class MyButton
  {
    public delegate void ClickHandler(object sender, string msg);
    public event ClickHandler Click;

    public void DummyClick()
    {
      if (Click != null)
      {
        Click(this, "Clicked!");
      }
    }
  }
}

ClickHandler というデリゲート型の Click に event キーワードが付与されています。

デリゲートなので当然ながらデリゲートの基本的な動作に従うのですが、event キーワードを付けることによってどうなるでしょうか。

ハンドラの指定時に += が強制される

event にデリゲートを設定する場合には、+= 演算子を使うことを強制されます。これによってインボケーションリストが暗黙的にクリアされる問題が解決されます。

誤って = を用いた場合には、コンパイル時に問題が発生します。

C# イベント

ハンドラを削除したい場合は、次のように -= オペレータを用います。

      button.Click -= Button_Click1;

イベントは定義したクラスからしか呼び出せない

event キーワードによって、イベントを定義したクラスからしかデリゲートを呼び出せなくなります。 これによって外部からイベントを発生させることができなくなります。

C# イベント

このように event キーワードを用いることによって、イベントを定義できます。

ホーム > イベント > イベントの実装方法