2009-02-15 5 views
66

Nehmen Sie den folgenden Code:C#: Unterschied zwischen '+ = anEvent' und '+ = new Eventhandler (anEvent)'

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

Was ist der Unterschied zwischen der folgenden?

[object].[event] += anEvent; 

//and 

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

[UPDATE]

Offenbar gibt es keinen Unterschied zwischen den beiden ... der ehemaligen nur syntaktischer Zucker des letzteren ist.

+4

Ein Werkzeug wie ReSharper werden Sie entfernen den überflüssigen Code empfehlen, da sie Lärm nur hinzufügt. –

+1

mögliches Duplikat von [C# -Ereignishandlern] (http://stackoverflow.com/questions/26877/c-sharp-event-handlers) – nawfal

+0

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

Antwort

76

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

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

10

Ich glaube nicht, dass es einen Unterschied gibt. Der Compiler wandelt das erste in das zweite um.

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

ist nur syntaktischer Zucker für -

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