2009-08-20 24 views
38

はこれです:削除するイベントハンドラ

Button.Click -= new EventHandler(Button_Click); 

これと同じ:

Button.Click -= Button_Click; 

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

場合、それはどの程度

Button.Click -= new EventHandler(Button_Click); 

VS

Button.Click -= Button_Click; 

おかげで異なっています。

答えて

45

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

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

出典:MSDN, Delegate.Equality Operator

+0

答えをありがとう。 – Carlo

0

最終結果は同じです。コンパイラはデリゲートの型を自動的に推定します。その結果、新しい演算子はデリゲートを作成する必要はありません。

関連する問題