イベントとは
イベントは、あるオブジェクトで起きた出来事を、関心のある別のオブジェクトへ通知する仕組みです。通知する側は、誰が購読しているかを細かく知る必要がありません。
using System;
class Counter
{
public event Action<int>? Changed;
private int value;
public void Increment()
{
value++;
Changed?.Invoke(value);
}
}
class Program
{
static void Main()
{
var counter = new Counter();
counter.Changed += value => Console.WriteLine(value);
counter.Increment();
}
}
eventを付けることで、外部からイベントの購読や解除はできますが、通常は外部から直接発火できません。
購読と解除
+=で購読し、-=で解除します。長期間生存する発行元のイベントを購読したままにすると、購読者が解放されにくくなる場合があります。不要になったら解除する設計を検討してください。
イベントの設計
イベントは「何が起きたか」を通知する用途に向いています。戻り値を必要とする処理や、呼び出し側へ結果を返す処理には、通常のメソッドやFuncなどを使います。