Разница между проводкой событий с и без "нового" - PullRequest
14 голосов
/ 26 августа 2008

В C # какая разница (если есть) между этими двумя строками кода?

tmrMain.Elapsed += new ElapsedEventHandler(tmrMain_Tick);

и

tmrMain.Elapsed += tmrMain_Tick;

Обе функции работают одинаково. C # просто предполагает, что вы имеете в виду первое, когда набираете второе?

Ответы [ 6 ]

26 голосов
/ 26 августа 2008

Я сделал это

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

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

А затем запустил ildasm над кодом.
Сгенерированный MSIL был точно таким же.

Итак, чтобы ответить на ваш вопрос, да, это одно и то же.
Компилятор просто делает вывод, что вы хотите someEvent += new EventHandler( Program_someEvent );
- Вы можете видеть, как он создает новый объект EventHandler в обоих случаях в MSIL

4 голосов
/ 26 августа 2008

Раньше (.NET 1.x дней), когда длинная форма была единственным способом сделать это. В обоих случаях вы обновляете делегата для указания на метод Program_someEvent.

2 голосов
/ 26 августа 2008

Немного оффтопа:

Вы можете создать экземпляр делегата (new EventHandler(MethodName)) и (при необходимости) повторно использовать этот экземпляр.

2 голосов
/ 26 августа 2008

Не думаю, что есть какая-то разница. Конечно, Решарпер говорит, что первая строка содержит избыточный код.

0 голосов
/ 26 августа 2008

Не требовалось new XYZEventHandler до C # 2003, и вам разрешалось опускать избыточный код в C # 2005?

0 голосов
/ 26 августа 2008

Я думаю, что единственный способ действительно сказать, это посмотреть на MSIL, созданный для кода .. Как правило, хороший кислотный тест ..

У меня есть забавные опасения, что он может каким-то образом связываться с GC. Кажется странным, что было бы слишком много накладных расходов при объявлении нового типа делегата, если бы его никогда не нужно было делать таким образом, вы знаете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...