DataEventArgs<TData>
イベント宣言でカスタム EventArgs 継承クラスを宣言して使用するのではなく、ジェネリッククラスを使用することは、.Net イベントの「パターン」規則に違反していますか? または、状況によっては悪い習慣と見なされますか?
(イベント引数の命名規則は、イベント名を使用し、接尾辞「EventArgs」を追加することです。使用DataEventArgs<TData>
すると、送信されるデータのタイプが表示されますが、イベント名は省略されます。)
TData に使用するクラスを変更できない限り、一般的な DataEventArgs クラスは、別のプロパティを追加するなどの拡張機能に対して閉鎖的であると主張することができます。
より長い説明:
いくつかのデータを含む標準デリゲート イベントを宣言するとき、標準イベント「パターン」規則は、ジェネリック EventHandler デリゲートを使用して宣言することであると理解しています。
public event EventHandler<SomethingHappendEventArgs> SomethingHappend;
特定のSomethingHappendEventArgs
ものが次の行に沿って宣言されている場合
public class SomethingHappendEventArgs : EventArgs
{
public SomeDataType Value { get; private set; }
public SomethingHappendEventArgs(SomeDataType data)
{
this.Value = data;
}
}
グーグルで調べてみると、汎用の DataEventArgs クラス (Microsoft.Practices.Prism.Events を含む) を提供する Microsoft 名前空間がいくつかあることに気付きました。ただし、SomethingHappendEventArgs やその逆などのカスタマイズされたイベント データ クラスの代わりに、それをいつ使用するかについての推奨事項や規則の指示はどこにも見つかりませんでした。
では、イベント データに含めたいデータが1 つある場合、このようなイベントを宣言するのではなく、SomethingHappendEventArgs のようなカスタマイズされたイベント データ クラスを使用する必要がある理由はありますか?
public event EventHandler<DataEventArgs<SomeDataType>> SomethingHappend;
ジェネリックは次のDataEventArgs
ように宣言できます。
public class DataEventArgs<TData> : EventArgs
{
public TData Value { get; private set; }
public DataEventArgs(TData value)
{
this.Value = value;
}
}