Frage

In C#, was ist der Unterschied (falls vorhanden) zwischen diesen beiden Codezeilen?

tmrMain.Elapsed += new ElapsedEventHandler(tmrMain_Tick);

und

tmrMain.Elapsed += tmrMain_Tick;

Beide scheinen zu funktionieren genau gleich.Hat C# nur nehme an, du meinst die ehemaligen, wenn Sie die letzteren?

War es hilfreich?

Lösung

Ich Tat dies

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

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

Und dann lief ildasm über den code.
Die generierten MSIL war genau das gleiche.

Also um deine Frage zu beantworten, ja, Sie sind die gleiche Sache.
Der compiler ist nur abzuleiten, dass Sie wollen someEvent += new EventHandler( Program_someEvent );
- Sie können sehen es die Schaffung der neuen EventHandler Objekt in beiden Fällen in die MSIL

Andere Tipps

Es verwendet zu sein (.NET-1.x Tage), dass die lange form war der einzige Weg, es zu tun.In beiden Fällen sind Sie newing bis Delegierter auf den Program_someEvent Methode.

Ich glaube nicht, dass es keinen Unterschied.Sicherlich resharper, sagt die erste Zeile hat redundanten code.

Ein wenig offtopic :

Sie könnten einen Delegaten instanziieren (new EventHandler(MethodName)) und (gegebenenfalls) die Wiederverwendung der Instanz.

War nicht der new XYZEventHandler erfordern, bis C#2003, und Sie durften weglassen redundanter code in C#2005?

Ich denke, der einzige Weg, um wirklich zu sagen, würde sein, mit Blick auf die MSIL erzeugt der code..Neigt dazu, eine gute Säure-test..

Ich habe lustige Bedenken, dass es vielleicht irgendwie Durcheinander mit GC..Scheint seltsam, dass es all den Aufwand zu deklarieren, der neue Delegat-Typ, wenn Sie nie benötigt werden, um auf diese Weise getan, weißt du?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top