2

更新することになっているアプリケーションで、コントロールのすべての可能なイベント (または、少なくともデザイナーにリストされているすべてのイベント) のイベントハンドラーを定義するコードに出くわしました。これは今まで見たことがなく、自分のアプリケーションに実装したいとは思っていません。

一例です。ロギング操作を開始するボタンは、 で操作を開始しClickます。ただし、他のすべてのイベント ハンドラーもバインドAutoSizeChangedBackColorChangedます。を除いて、すべてのイベント ハンドラは空です。これまでのところ、これはアプリケーション全体の多くのコントロールで発生します。VisibleChangedValidatingClick

これが事実である理由を詳述するコメントも提供されていません。なぜこれが行われるのでしょうか?

4

4 に答える 4

4

Click を除いて、すべてのイベント ハンドラーは空です。これまでのところ、これはアプリケーション全体の多くのコントロールで発生します。

なぜこれが行われるのでしょうか?

おそらく、元の作成者がそれが必要ないことを理解していなかったためです。

これを行う十分な技術的理由はありません。実際にはパフォーマンスが低下するだけで、何のメリットもありません。

多くの人は、自分のクラスでイベントを作成するときに、空のイベント ハンドラーをサブスクライブすることが多いことに注意してください。これにより、サブスクリプション リストの null チェックを回避できます。これは、通常、サブスクリプション側ではなく、イベント発行側で行われますが、それを防ぐための誤った試みとして行われたのではないかと思います。

于 2012-08-06T19:03:25.693 に答える
2

それは.... 理想的なケースではありません。実際、ほとんどの winforms コントロールは を使用します。これは、まばらなイベントEventHandlerListの効率的なストレージ モデルになるように設計されています。サブクラス化しているもの (フォームなど) のイベントをオーバーライドする場合は、イベント サブスクリプションよりも優先されるオプションです。override

誰かが IDE でイベントをダブルクリックして、それらをすべて太字にしたようです。それは有用な目的を果たしません。

于 2012-08-06T19:04:34.533 に答える
1

以前のバージョンの Visual Studio では、新しいイベント ハンドラーを挿入すると、イベント ハンドラー メソッドを削除しても、designer.cs ファイルからコードが自動的に削除されませんでした。Windows フォーム デザイナーで生成されたコードに入り、次のような行を見つけて削除する必要がありました。

this.button1.Click += new System.EventHandler(this.button1_Click);

そうしないと、button1_Click メソッドを削除すると、ビルド エラーが発生します。それは苦痛であり、それが彼がそれらを片付けなかった理由かもしれません. これで、イベント ハンドラー メソッドを削除するときにワイヤ アップを削除するのが十分にスマートになりました。

于 2012-08-07T13:39:29.223 に答える
1

通常、空のイベント ハンドラは削除できます。これはおそらく、「将来について考えている」開発者であり、「必要に応じて」いくつかのコードを準備したいと考えています。

私は次のことに注意します:

  • イベント ハンドラーは、必要に応じて簡単に作成できます。
  • 空のイベント ハンドラは未使用のコードであり、重要な部分を見つけにくく、読みにくくします。

したがって、私はYAGNIの原則に従い、速やかにそれらを削除します。

于 2012-08-06T19:06:25.403 に答える