5

VS 2012 のコード分析ツールは、私のコードにいくつかの問題を示唆しています。ほとんどは問題ありませんが、これ(CA1009 はイベント ハンドラーを正しく宣言します) ですが、理由がわかりません。

何かが起こったことを知るためだけに、データが必要ない場合は、不要なパラメーターを持つイベントを使用して、本音を曖昧にしているように思えます。

たとえば、特定の条件に一致するすべての顧客を一覧表示したいとします。リポジトリが更新された場合は、データを再確認する必要があります。

そこで、リポジトリ クラスを作成し、次のシグネチャを使用して DataChanged イベントを指定します。

public event Action DataChanged;

次に、レポを使用するクラスの1つで実行できます

repository.DataChanged += UpdateMatchingCustomers;

private void UpdateMatchingCustomers() {
    MatchingCustomers = ...
}

なぜこれが悪い考えなのですか?

4

4 に答える 4

3

主なアイデアは、誰かが同じイベント ハンドラー メソッドを使用して複数のソースからのイベントを処理したい場合があり、一致する署名があると役立つということだと思います。

  • の存在を強制senderすることで、ハンドラーが異なるイベント ソースを確実に区別できるようになります。
  • すべてのイベント データ オブジェクトの派生元を持つEventArgsことで、データ引数に使用する適切な型が常に存在することが保証されます。

さらに、イベント データ用の基本クラスを用意してそれを強制することで、イベント ソースを拡張するクラスは基本クラスよりも既存のイベントでより多くのデータを送信できるようになります。しかし、私は実際のプログラムでこれを少なくとも一度は行っています)。

また、イベントが予想どおりのパターンに従わなかった場合に、Microsoft の派手なデザイナー (彼らは彼らを愛していることは間違いありません) の何人かが破産したとしても、私は驚かないでしょう。

于 2012-12-30T20:38:57.290 に答える
1

EventArgs パラメーターについては、賛否両論があります。

ただし、送信者は必須です。同じハンドラーが複数のオブジェクトにアタッチされている場合、これはどのインスタンスがイベントを発生させるかを決定する方法です。

于 2012-12-30T21:05:03.977 に答える
0

パーモーマンスポイントから、このデザインルールは意味がありません。デリゲートまたはアクションで値の型を伝達するには、値の型を含む参照型を生成する必要があります...

わかりました、ユーザーの読みやすさとメンテナンスのために、これは素晴らしいことです。コンテキストと意味を次のようなものに追加します

公開アクション MyAction; ただし、コード コメントでも同様に行うことができます...

于 2016-12-26T08:15:12.773 に答える