「何かが起きたら知らせる」仕組み「event(イベント)」とは?
C#の event(イベント) は、特定の動作や変化が起きたときに、あらかじめ登録された処理を自動で呼び出すための仕組みです。
主にGUIプログラミングや、状態変化の通知に使われます。
イベントの基本構成
イベントは以下の3つで構成されます:
- delegate(デリゲート): 呼び出すメソッドの型
- event: 登録・通知される変数
- イベントハンドラ: 実際に実行されるメソッド
基本的な定義例
public class Button {
public delegate void ClickHandler(string message);
public event ClickHandler OnClick;
public void Click() {
if (OnClick != null) {
OnClick("ボタンがクリックされました");
}
}
}
イベントの使い方
public class Program {
static void Main() {
Button btn = new Button();
// イベントに処理を登録(+=)
btn.OnClick += ShowMessage;
btn.Click(); // → ShowMessage が実行される
}
static void ShowMessage(string msg) {
Console.WriteLine("通知:" + msg);
}
}
イベントの特徴
+=
で複数の処理を登録可能(マルチキャスト)
-=
で処理を解除できる
- 外部から直接呼び出し不可(eventが守ってくれる)
イベントをもっと簡単に定義(Action型)
public class Timer {
public event Action OnFinished;
public void Finish() {
OnFinished?.Invoke(); // nullチェックしながら呼び出し
}
}
実用例:イベントで通知するクラス
public class Counter {
public event Action OnThresholdReached;
private int count = 0;
private int threshold = 5;
public void Add() {
count++;
if (count >= threshold) {
OnThresholdReached?.Invoke(count);
}
}
}
Counter c = new Counter();
c.OnThresholdReached += value => Console.WriteLine("しきい値に到達:" + value);
for (int i = 0; i < 6; i++) c.Add();
delegateとeventの違い
項目 |
delegate |
event |
アクセス |
外部から自由に操作できる |
+= / -= でのみ登録・解除 |
安全性 |
上書きも可能(危険) |
外部からの呼び出しを制限(安全) |
主な用途 |
コールバック用 |
イベント通知用 |
まとめ
event(イベント)は、「何かが起きたときに、自動で処理を実行する」ための仕組みです。
delegateをベースに、安全にイベントを通知・処理する構造になっており、GUI・ゲーム・通知処理など幅広く使われます。
event + delegate
のセットで理解しておくと、実用的で柔軟なプログラムが書けるようになります!