2009-08-20 20 views
38

Ist das:Entfernen Event-Handler

Button.Click -= new EventHandler(Button_Click); 

die gleiche wie folgt aus:

Button.Click -= Button_Click; 

Ich frage, weil ich scheint es, dass die ehemaligen ein Verfahren eine neue Referenz ist das Entfernen und letztere Man entfernt eine Methode selbst. Aber vielleicht ist der neue EventHandler Teil implizit in der + = oder - = Überladung, falls der Programmierer es nicht explizit so zuordnet?

Im Fall ist es anders, wie etwa

Button.Click -= new EventHandler(Button_Click); 

VS

Button.Click -= Button_Click; 

Dank.

Antwort

45

Es ist das gleiche. Der zweite ist lediglich syntaktischer Zucker für den ersten, und der Gleichheitsvergleich wird für Delegattypen entsprechend überladen:

Zwei Delegaten desselben Typs mit denselben Zielen, Methoden und Aufruflisten werden als gleich betrachtet.

Quelle: MSDN, Delegate.Equality Operator

+0

Danke für die Antwort. – Carlo

0

Das Endergebnis ist das gleiche. Der Compiler leitet den Typ des Delegaten automatisch ab, und daher muss der neue Operator ihn nicht erstellen.