次の方法で共有


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

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

C# 言語リファレンスには、C# 言語の最新リリース バージョンが記載されています。 また、今後の言語リリースのパブリック プレビューの機能に関する初期ドキュメントも含まれています。

このドキュメントでは、言語の最後の 3 つのバージョンまたは現在のパブリック プレビューで最初に導入された機能を特定します。

ヒント

C# で機能が初めて導入された時期を確認するには、 C# 言語バージョン履歴に関する記事を参照してください。

次の例では、基になるデリゲート型として 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 イベント アクセサー ブロックを生成しないため、派生クラスは独自の実装を提供する必要があります。

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

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

C# 言語仕様

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

関連項目