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.

Andreas Grech
quelle
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.

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

ist nur syntaktischer Zucker für -

[object].[event] += new EventHandler(anEvent);
Martin Jonáš
quelle
11

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

Megacan
quelle