C #: Unterschied zwischen '+ = anEvent' und '+ = neuer EventHandler (anEvent)'


76

Nehmen Sie den folgenden Code:

private void anEvent(object sender, EventArgs e) {
    //some code
}

Was ist der Unterschied zwischen den folgenden?

[object].[event] += anEvent;

//and

[object].[event] += new EventHandler(anEvent);

[AKTUALISIEREN]

Anscheinend gibt es keinen Unterschied zwischen den beiden ... der erstere ist nur syntaktischer Zucker des letzteren.


4
Ein Tool wie Resharper empfiehlt, den überflüssigen Code zu entfernen, da er nur Rauschen hinzufügt.
Chris Marisic

1
Mögliches Duplikat von C # Event
Handlern

Die erste Zeile kann nur von erfahrenen C # -Programmierern verstanden werden. Die zweite Zeile kann sowohl von erfahrenen C # -Programmierern als auch von Personen verstanden werden, die neu in der Sprache sind.
CJ Dennis

@CJDennis - Ich verstehe Ihren Standpunkt, aber hier ist ein mögliches Gegenargument: Es ist besser, das Paradigma zu verwenden, dem der Neuling (fast immer) für Ereignisse begegnen wird. Andernfalls werden sie auf andere Weise verwirrt: Sie fragen sich, warum sie manchmal Code mit der Aufschrift "new EventHandler" sehen und manchmal nicht.
ToolmakerSteve

Antworten:


81

Es gibt keinen Unterschied. In Ihrem ersten Beispiel leitet der Compiler automatisch den Delegaten ab, den Sie instanziieren möchten. Im zweiten Beispiel definieren Sie den Delegaten explizit.

Die Delegateninferenz wurde in C # 2.0 hinzugefügt. Für C # 1.0-Projekte war das zweite Beispiel Ihre einzige Option. Für 2.0-Projekte ist das erste Beispiel, das Inferenz verwendet, das, was ich lieber in der Codebasis verwenden und sehen würde - da es prägnanter ist.


18
[object].[event] += anEvent;

ist nur syntaktischer Zucker für -

[object].[event] += new EventHandler(anEvent);

11

Ich glaube nicht, dass es einen Unterschied gibt. Der Compiler wandelt den ersten in den zweiten um.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.