Hat die explizite Verwendung der Deklaration "new EventHandler" einen Vorteil?

8

Wenn Sie Event-Handlern beispielsweise einem Kontext MenuItem zuweisen, gibt es zwei akzeptable Syntaxen:

%Vor%

... und ...

%Vor%

Ich bemerke auch, dass das gleiche gilt:

%Vor%

... und ...

%Vor%

Gibt es einen besonderen Vorteil für die zweite (explizite) gegenüber der ersten? Oder ist das eher eine stilistische Frage?

    
DonBoitnott 03.07.2013, 12:42
quelle

4 Antworten

9

In C # 1.0 hatten Sie keine andere Wahl, als den Delegattyp und das Ziel explizit zu definieren.

Seit C # 2.0 ermöglicht Ihnen der Compiler, sich durch eine implizite Konvertierung von einer Methodengruppe in einen kompatiblen Delegattyp prägnanter auszudrücken. Es ist wirklich nur syntaktischer Zucker.

Manchmal bleibt Ihnen nichts anderes übrig, als die langatmige Syntax zu verwenden, wenn die richtige Überladung aufgrund einer Mehrdeutigkeit nicht von der Methodengruppe gelöst werden kann.

    
User 12345678 03.07.2013, 12:46
quelle
9

Es ist Syntax für ältere Version von C # -Compiler (& lt; = 1.1). Wird nicht mehr benötigt. Aktuelle Compiler sind anspruchsvoll genug, um es richtig zu machen.

Es gibt manchmal einen (kleinen) Vorteil. Wenn Sie Ereignishandler mit "+=" zuweisen, kann die Intellisense-Funktion zur automatischen Vervollständigung den Code etwas schneller schreiben.

    
JeffRSon 03.07.2013 12:43
quelle
7

Die only -Zeit, in der dies nützlich ist, ist, wenn sie sonst mehrdeutig wäre - z. B. wenn MenuItem(string, Delegate) - wenn mehrere gleich übereinstimmende Überladungen vorhanden wären das würde der Signatur entsprechen. Dies beinhaltet auch die var -Syntax (siehe unten) und die generische Typinferenz (nicht gezeigt):

%Vor%

In allen anderen Fällen ist es redundant und in jedem Compiler ab 2.0 unnötig.

    
Marc Gravell 03.07.2013 12:50
quelle
5

Verwandt mit Ihrer Bearbeitung - Das Hinzufügen von Handlern ist nicht wirklich von der Verwendung von new betroffen oder nicht, aber es gibt einen kleinen Unterschied beim Entfernen von Handlern wie diesem

%Vor%

und

%Vor%

ist jedoch unwahrscheinlich, die meisten Szenarien zu beeinflussen. Die erste Version ohne das Schlüsselwort new ist angeblich effizienter.

Es gibt eine detaillierte Erklärung in diesem Post , aber die Schlussfolgerung ist

  

Also beide funktionieren doch was soll man verwenden? Wenn die Ereignisse sind   abonniert / abgemeldet einmal am Anfang / Ende wie in einem typischen   WinForm-Anwendung dann zählt es kaum. Wenn dies jedoch getan wird   mehrere Male ist dann der zweite Ansatz vorzuziehen, da dies weniger ist   von kostspieligen Heap-Zuordnungen und wird schneller arbeiten

(Der zweite Ansatz in diesem Post ist der ohne das Schlüsselwort new )

Nachdem ich gesagt habe, dass es für mich wie eine Mikrooptimierung aussieht, ist es wahrscheinlich in den meisten Fällen kein Flaschenhals.

    
keyboardP 03.07.2013 12:50
quelle

Tags und Links