web-dev-qa-db-ja.com

イベントハンドラーの削除

これは:

Button.Click -= new EventHandler(Button_Click);

これと同じ:

Button.Click -= Button_Click;

前者はメソッドへの新しい参照を削除しており、後者はメソッド自体を削除しているように見えるので、私は尋ねます。しかし、繰り返しになりますが、プログラマがそのように明示的に割り当てない場合に備えて、新しいEventHandler部分が+ =または-=オーバーロードで暗黙的に使用されている可能性があります。

違う場合はどうですか

Button.Click -= new EventHandler(Button_Click);

VS

Button.Click -= Button_Click;

ありがとう。

39
Carlo

同じです。 2つ目は1つ目の構文糖衣にすぎず、等価比較はデリゲート型に対して適切にオーバーロードされます。

同じターゲット、メソッド、および呼び出しリストを持つ同じタイプの2つのデリゲートは等しいと見なされます。

ソース: MSDN、Delegate.Equality Operator

46
Konrad Rudolph

最終結果は同じです。コンパイラーはデリゲートのタイプを自動的に推論しているため、新しいオペレーターがデリゲートを作成する必要はありません。

0
Brian Gideon