C# では、イベント (Event) は、キーボードのキーのクリック、マウスのクリック/移動などの一連のユーザー操作として見ることができます。イベントが発生すると、そのイベントに対して一連の応答を行うことができます。 、プログラムの終了、ログ記録など。 C# のスレッド間の通信は、イベント メカニズムを使用して実装されます。
イベントはクラス内で宣言して起動し、委任を通じてイベント ハンドラーに関連付ける必要があります。イベントは、パブリッシャとサブスクライバの 2 つの部分に分けることができます。パブリッシャは、イベントとデリゲートを含むオブジェクトです。イベントとデリゲートの間の関係も、このクラスで定義されます。パブリッシャ クラスのオブジェクトは、トリガーできます。デリゲートは他のオブジェクトに通知します。サブスクライバーはイベントを受信してイベント ハンドラーを提供するオブジェクトであり、パブリッシャー クラスのデリゲートはサブスクライバー クラスのメソッド (イベント ハンドラー) を呼び出します。
このイベントでは次の点に注意する必要があります。
- パブリッシャーはイベントをトリガーするタイミングを決定し、サブスクライバーはイベントに応答して何を行うかを決定します。
- イベントには複数のサブスクライバーを含めることができ、サブスクライバーは複数のパブリッシャーからのイベントを処理することもできます。
- サブスクライバーのないイベントは決して起動しません。
- イベントは、ボタンのクリックなど、ユーザーのアクションを定義するためによく使用されます。
- イベントに複数のサブスクライバーがある場合、イベントがトリガーされると、すべてのイベント ハンドラーが同期的に呼び出されます。
- .NET クラス ライブラリでは、イベントは EventHandler デリゲートと EventArgs 基本クラスに基づいています。
クラスでイベントを宣言するには、まずイベントのデリゲート型を宣言する必要があります。次に例を示します。
public delegate void delegate_name(string status);
次に、次のように、event キーワードを使用してイベント自体を宣言します。
// 基于上面的委托定义事件
public event delegate_name event_name;
上記の例では、delegate_name およびevent_name という名前のイベントが定義されており、イベントがトリガーされるとデリゲートが呼び出されます。
【使用例】 以下では、具体的な例を用いてイベントの使用方法を説明します。
using System;
namespace it-kiso.com
{
class Demo
{
static void Main(string[] args){
PublisherDemo e = new PublisherDemo(); /* インスタンス化発行者クラス*/
SubscriberDemo v = new SubscriberDemo(); /* インスタンス化購読者クラス */
e.MyEvent += new PublisherDemo.MyEntrust( v.printf );
e.SetValue("IT基礎");
}
}
/***********発行者クラス***********/
public class PublisherDemo{
private string value;
public delegate void MyEntrust(string str);
public event MyEntrust MyEvent;
public void SetValue( string s ){
value = s;
MyEvent(value); // イベントを発生する
}
}
/***********購読者クラス***********/
public class SubscriberDemo{
public void printf(string str){
Console.WriteLine(str);
}
}
}
操作の結果は次のようになります。
IT基礎
「C# イベント (イベント)」についてわかりやすく解説!絶対に観るべきベスト2動画
C# Programming Event Handlers