C #: Різниця між '+ = anEvent' та '+ = new EventHandler (anEvent)'


76

Візьміть нижченаведений код:

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

У чому різниця між наступними?

[object].[event] += anEvent;

//and

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

[ОНОВЛЕННЯ]

Очевидно, між ними немає різниці ... перший - це просто синтаксичний цукор другого.


4
Інструмент, такий як Resharper, порекомендує вам видалити зайвий код, оскільки він просто додає шуму.
Кріс Марісіч

1
можливий дублікат обробників подій C #
nawfal

Перший рядок можуть зрозуміти лише досвідчені програмісти на C #. Другий рядок можуть зрозуміти як досвідчені програмісти на C #, так і ті, хто новіший у мові.
CJ Dennis,

@CJDennis - Я бачу вашу думку, але тут є можливий контраргумент: краще використовувати парадигму, з якою новачок (майже завжди) стикається для подій. В іншому випадку їх заплутають по-іншому: цікавляться, чому іноді вони бачать код із написом "new EventHandler", а інколи - ні.
ToolmakerSteve

Відповіді:


81

Різниці немає. У вашому першому прикладі компілятор автоматично зробить висновок про делегата, якого ви хочете створити. У другому прикладі ви явно визначаєте делегата.

Висновок делегата було додано в C # 2.0. Тож для проектів C # 1.0 другий приклад був вашим єдиним варіантом. Для проектів 2.0 перший приклад використання умовиводу - це те, що я волів би використовувати і бачити в кодовій базі - оскільки це більш стисло.



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.