最近、私はこのコードの間に大きな違いがあるかどうか疑問に思っていました:
public event EventHandler<MyEventArgs> SomeEvent;
そしてこれは:
public delegate void MyEventHandler(object sender, MyEventArgs e);
public event MyEventHandler SomeEvent;
彼らは両方とも同じことをします、そして、私は違いを言うことができませんでした。 .NET Frameworkのほとんどのクラスは、イベントにカスタムイベントハンドラーデリゲートを使用していることに気付きましたが。これには特定の理由がありますか?
あなたが正しい;彼らは同じことをします。したがって、前者のほうが明確であり、入力が少なくて済むため、後者よりも前者を好むはずです。
多くの.NET Frameworkクラスに独自のカスタムイベントハンドラーデリゲートがあるのは、バージョン2.0でジェネリック(簡略構文が許可された)が導入される前に作成されたためです。たとえば、ほとんどすべてのWinFormsライブラリはジェネリックの前に書かれており、当時、後者の形式はonlyの方法でした。
2番目の方法では、柔軟性と型の安全性が向上します。対応するシグニチャを持つメソッドが少ない=>ミスが少ない。カスタムデリゲートでは、必要なパラメーターを正確に指定できます(または誰も指定しません)。