次の方法で共有


event キーワード (C# リファレンス)

イベントは、オブジェクトが通知をトリガーできるようにするメンバーです。 イベント ユーザーは、イベント ハンドラーを用意することで、イベントに実行可能コードをアタッチできます。 event は、 キーワードを使用して宣言します。 イベントはデリゲート型です。 オブジェクトがイベントをトリガーすると、そのイベントは、用意されたすべてのイベント ハンドラーを呼び出します。 イベントハンドラーは、イベントに追加され、イベントが発生したときに実行されるデリゲート インスタンスです。 イベント ユーザーは、イベントに対してイベント ハンドラーを追加または削除できます。

次の例では、基になるデリゲート型として EventHandler を使用するイベントを宣言し、発生させる方法について説明します。 完全なコード例については、「 .NET ガイドラインに準拠するイベントを発行する方法」を参照してください。 このサンプルでは、汎用 EventHandler<TEventArgs> デリゲート型、イベントをサブスクライブする方法、およびイベント ハンドラー メソッドを作成する方法を示します。

public class SampleEventArgs
{
    public SampleEventArgs(string text) { Text = text; }
    public string Text { get; } // 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 in a thread-safe manner using the ?. operator.
        SampleEvent?.Invoke(this, new SampleEventArgs("Hello"));
    }
}

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

イベントは、 publicprivateprotectedinternalprotected internal、または private protectedとしてマークできます。 これらのアクセス修飾子により、クラスのユーザーがイベントにアクセスする方法が定義されます。 詳細については、「アクセス修飾子」を参照してください。

C# 14 以降では、イベントを partialできます。 部分イベントには、1 つの定義宣言と 1 つの実装宣言があります。 定義宣言では、フィールドに似た構文を使用する必要があります。 実装宣言では、 add ハンドラーと remove ハンドラーを宣言する必要があります。

キーワードとイベント

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

キーワード 説明 詳細情報
static クラスのインスタンスが存在しない場合でも、呼び出し元がいつでもイベントを使用できるようになります。 静的クラスと静的クラス メンバー
virtual override キーワードを使用してイベントの動作をオーバーライドすることを派生クラスに許可します。 継承
sealed 派生クラスに対して、それが仮想でなくなったことを指定します。
abstract コンパイラは addremove イベント アクセサー ブロックを生成しないため、派生クラスは独自の実装を提供する必要があります。

静的 キーワードを 使用して、静的イベントとしてイベントを宣言できます。 静的イベントは、クラスのインスタンスが存在しない場合でも、いつでも呼び出し元が使用できます。 詳細については、「静的クラスと静的クラス メンバー」を参照してください。

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

C# 言語仕様

詳細については、「C# 言語の仕様」を参照してください。 言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。

関連項目