私はC#が初めてです。イベント ハンドラを複数回アタッチすると、予期しない結果が生じる可能性があるかどうかを知りたかっただけです。
実際に私のアプリケーションでは、イベントハンドラーを次のようなイベントにアタッチしています
cr.ListControlPart.Grid.CurrentCellActivated += new EventHandler(Grid_CurrentCellActivated);
このコード行は、コード内で複数回呼び出されます。
自分で試してみてください:
static class Program
{
static event EventHandler MyEvent;
static void Main()
{
// registering event
MyEvent += Program_MyEvent;
MyEvent += Program_MyEvent;
MyEvent += Program_MyEvent;
MyEvent += Program_MyEvent;
MyEvent += Program_MyEvent;
// invoke event
MyEvent(null, EventArgs.Empty);
Console.ReadKey();
}
static void Program_MyEvent(object sender, EventArgs e)
{
Console.WriteLine("MyEvent fired");
}
}
出力:
MyEvent fired
MyEvent fired
MyEvent fired
MyEvent fired
MyEvent fired
追加する前に退会することで防ぐことができますが、
Object.Event -= EventHandler(method);
Object.Event += EventHandler(method);
できる場合は、コンストラクターと言う1か所で常にイベントをサブスクライブすることで防止します
イベント ハンドラーをアタッチし続けると、ハンドラーをアタッチするたびに 1 回発生します。これの意味は:
コードを見ると、イベントに複数回フックするのではなく、一般的なイベントを 1 回CurrentCellActivated
サブスクライブする方が理にかなっています。CellActivated