Wenn Sie Event-Handlern beispielsweise einem Kontext MenuItem
zuweisen, gibt es zwei akzeptable Syntaxen:
... 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?
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.
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.
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):
In allen anderen Fällen ist es redundant und in jedem Compiler ab 2.0 unnötig.
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
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.