event (C# リファレンス)

更新 : 2007 年 11 月

event キーワードを使用して、パブリッシャ クラス内にイベントを宣言します。

使用例

次の例では、基になるデリゲート型として EventHandler を使用するイベントを宣言し、発生させる方法について説明します。完全なコード例については、「方法 : .NET Framework ガイドラインに準拠したイベントを発行する (C# プログラミング ガイド)」を参照してください。完全なコード例では、ジェネリック EventHandler<TEventArgs> デリゲート型の使用方法、イベント サブスクリプションの実行方法、およびイベント ハンドラ メソッドの作成方法も確認できます。

public class SampleEventArgs
{
    public SampleEventArgs(string s) { Text = s; }
    public String Text {get; private set;} // readonly
}
public class Publisher
{
    // Declare the delegate (if using non-generic pattern).
    public delegate void SampleEventHandler(object sender, SampleEventArgs e);

    // Declare the event.
    public event SampleEventHandler SampleEvent;

    // Wrap the event in a protected virtual method
    // to enable derived classes to raise the event.
    protected virtual void RaiseSampleEvent()
    {
        // Raise the event by using the () operator.
        SampleEvent(this, new SampleEventArgs("Hello"));
    }
}

イベントは、宣言元 (パブリッシャ クラス) のクラスまたは構造体内でしか呼び出せない特殊なマルチキャスト デリゲートです。その他のクラスまたは構造体のイベントをサブスクライブすると、パブリッシャ クラスがイベントを発生させるときにイベント ハンドラ メソッドが呼び出されます。詳細およびコード例については、「イベント (C# プログラミング ガイド)」および「デリゲート (C# プログラミング ガイド)」を参照してください。

イベントは、publicprivateprotectedinternal、または protectedinternal とマークできます。これらのアクセス修飾子により、クラスのユーザーがイベントにどのようにアクセスできるかが定義されます。詳細については、「アクセス修飾子 (C# プログラミング ガイド)」を参照してください。

キーワードとイベント

イベントには次のキーワードが適用されます。

キーワード

説明

詳細情報

static

このように宣言すると、クラスのインスタンスが存在しない場合でも、呼び出し元がいつでもイベントを使用できるようになります。

静的クラスと静的クラス メンバ (C# プログラミング ガイド)

virtual

この場合、派生クラスでは、override キーワードを使用して、イベントの動作をオーバーライドできます。

継承 (C# プログラミング ガイド)

sealed

派生クラスが virtual でなくなったことを示します。

 

abstract

コンパイラはイベント アクセサ ブロック add および remove を生成しません。したがって、派生クラスは固有の実装を提供する必要があります。

 

イベントは、static キーワードを使用して静的イベントと宣言することもできます。このように宣言すると、クラスのインスタンスが存在しない場合でも、呼び出し元がいつでもイベントを使用できるようになります。詳細については、「静的クラスと静的クラス メンバ (C# プログラミング ガイド)」を参照してください。

また、イベントは、virtual キーワードを使用して仮想イベントとマークできます。この場合、派生クラスでは、override キーワードを使用して、イベントの動作をオーバーライドできます。詳細については、「継承 (C# プログラミング ガイド)」を参照してください。仮想イベントをオーバーライドするイベントは、sealed にすることもできます。この場合、派生クラスでは、イベントが仮想でなくなります。最後に、イベントは abstract としても宣言できます。この場合、コンパイラはイベント アクセサ ブロック add および remove を生成しません。したがって、各派生クラスで固有の実装を提供する必要があります。

C# 言語仕様

詳細については、「C# 言語仕様」の次のセクションを参照してください。

  • 1.6.6.4 イベント

  • 7.16.3 イベント代入

  • 10.8 イベント

  • 13.2.3 インターフェイスのイベント

参照

処理手順

方法 : デリゲートを結合する (マルチキャスト デリゲート) (C# プログラミング ガイド)

概念

C# プログラミング ガイド

参照

C# のキーワード

修飾子 (C# リファレンス)

その他の技術情報

C# リファレンス