1

MSDN EventHandler Delegateからの次のフレーズを理解するのに苦労しています:

イベントによって生成されたデータが のインスタンスに格納されることを正しく理解していますEventArgsか?

付随的な好奇心:
このフレーズは、イベントがデータを生成する場合、ジェネリック型 EventArgs を使用しないことを意味しますか? なんで?

主な質問は、イベントがデータを生成しない場合、
なぜわざわざ(汎用にするか、非汎用のままにするか) する必要があるかということです。EventArgs

更新:
上記の記事とそれに同封されているコード例から、デリゲートの代わりに次のことを理解しました:

public delegate void EventHandler(Object sender, EventArgs e)

私は使用する

public delegate void EventHandler<EventArgs>(Object sender, EventArgs e)   

私のイベントがデータを生成しないとき。

4

2 に答える 2

1

を使用しているだけの場合、最初よりも 2 番目に利点はありませんEventArgs。ドキュメントでは、この 2 番目の可能性について言及していない可能性があります。これは、すべての例でジェネリック パラメーターを使用して単一のデリゲート定義を示す方が簡単だからです。

EventArgs.Emptyまた、ではなく渡すのが一般的ですnull

イベントにデータがある場合は、サブクラスEventArgs化してからそのサブクラスを使用する必要があります (例では を使用していますMyEventArgs)。 EventArgsそれ自体には、データを保持するためのプロパティはありません。

于 2013-02-19T06:48:00.793 に答える
0

コードから、ジェネリック型パラメーターはEventArgs( where TEventArgs : EventArgs) によって制約されます。これは、EventHandlerデリゲートがサポートする最も基本的な型であることを意味します。

イベント ハンドラーを呼び出すときに、インスタンスnullの代わりに送信できますか?EventArgs

理由については、すべてのイベントに引数が必要な理由はわかりませんが、当時はおそらく良い考えのように思えました。

それらが必要な理由の 1 つEventArgsは、(ジェネリックの前に) EventHandlerデリゲートが requiredEventArgsであるため、互換性を維持するためである可能性があります。

于 2013-02-17T03:32:45.703 に答える