web-dev-qa-db-ja.com

カスタムEventHandlerとEventHandler <EventArgs>

最近、私はこのコードの間に大きな違いがあるかどうか疑問に思っていました:

public event EventHandler<MyEventArgs> SomeEvent;

そしてこれは:

public delegate void MyEventHandler(object sender, MyEventArgs e);
public event MyEventHandler SomeEvent;

彼らは両方とも同じことをします、そして、私は違いを言うことができませんでした。 .NET Frameworkのほとんどのクラスは、イベントにカスタムイベントハンドラーデリゲートを使用していることに気付きましたが。これには特定の理由がありますか?

63
haiyyu

あなたが正しい;彼らは同じことをします。したがって、前者のほうが明確であり、入力が少なくて済むため、後者よりも前者を好むはずです。

多くの.NET Frameworkクラスに独自のカスタムイベントハンドラーデリゲートがあるのは、バージョン2.0でジェネリック(簡略構文が許可された)が導入される前に作成されたためです。たとえば、ほとんどすべてのWinFormsライブラリはジェネリックの前に書かれており、当時、後者の形式はonlyの方法でした。

73
Cody Gray

2番目の方法では、柔軟性と型の安全性が向上します。対応するシグニチャを持つメソッドが少ない=>ミスが少ない。カスタムデリゲートでは、必要なパラメーターを正確に指定できます(または誰も指定しません)。

0
SerG