Сведения о вопросе

NOTtoday

16:39, 13th August, 2020

Теги

c#   events   syntax   delegates    

Разница между событиями проводки с "новым" и без него"

Просмотров: 438   Ответов: 6

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

tmrMain.Elapsed += new ElapsedEventHandler(tmrMain_Tick);

и

tmrMain.Elapsed += tmrMain_Tick;

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



  Сведения об ответе

9090

01:02, 10th August, 2020

Я сделал это сам

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

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

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

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


  Сведения об ответе

padenie

14:32, 17th August, 2020

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


  Сведения об ответе

Chhiki

04:47, 9th August, 2020

Немного Оффтопик :

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


  Сведения об ответе

PIRLO

02:00, 11th August, 2020

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


  Сведения об ответе

9090

03:21, 9th August, 2020

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


  Сведения об ответе

LAST

15:41, 9th August, 2020

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться