14 Stimmen

Unterschied zwischen Verdrahtungsereignissen mit und ohne "neu"

Was ist in C# der Unterschied (wenn überhaupt) zwischen diesen beiden Codezeilen?

tmrMain.Elapsed += new ElapsedEventHandler(tmrMain_Tick);

y

tmrMain.Elapsed += tmrMain_Tick;

Beide scheinen genau gleich zu funktionieren. Nimmt C# einfach an, dass Sie das erste meinen, wenn Sie das zweite eingeben?

0 Stimmen

Nun, sie funktionieren beide gut. Warum wählt Visual Studio dann die erste Variante aus, wenn es den Ereignishandler-Stub automatisch erstellt?

0 Stimmen

Diese Funktion stammt aus der Zeit vor Visual Studio 2005, mit dem die kürzere Syntax eingeführt wurde.

26voto

Orion Edwards Punkte 117361

Ich habe dies getan

static void Hook1()
{
    someEvent += new EventHandler( Program_someEvent );
}

static void Hook2()
{
    someEvent += Program_someEvent;
}

Dann ließ ich ildasm über den Code laufen.
Die erzeugte MSIL war genau dieselbe.

Um also Ihre Frage zu beantworten: Ja, das ist dasselbe.
Der Compiler schlussfolgert einfach, dass Sie Folgendes wollen someEvent += new EventHandler( Program_someEvent );
-- Sie können sehen, wie es die neue EventHandler Objekt in beiden Fällen in der MSIL

5voto

denis phillips Punkte 12174

Früher (zu Zeiten von .NET 1.x) war die Langform die einzige Möglichkeit, dies zu tun. In beiden Fällen erstellen Sie einen Delegaten, der auf die Program_someEvent-Methode verweist.

2voto

Ray Punkte 44499

Ich glaube nicht, dass es da einen Unterschied gibt. Sicherlich sagt Resharper, dass die erste Zeile redundanten Code enthält.

2voto

Andrei Rînea Punkte 19502

Ein wenig Offtopic :

Sie könnten einen Delegaten instanziieren (new EventHandler(MethodName)) und (ggf.) diese Instanz wiederverwenden.

0voto

Timbo Punkte 26346

War nicht die new XYZEventHandler bis C#2003 benötigen, und Sie durften den überflüssigen Code in C#2005 weglassen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X