Что цель/различие в использовании конструктора типа события

Во всех примерах я могу найти, а также автоматически сгенерированный код i Visual Studio, события установлены с помощью следующего кода:

button1.Click += new System.EventHandler(this.button1_Click);

Но я могу также записать это визуально более чистый путем исключения обертки конструктора:

button1.Click += this.button1_Click;

Которые также компилируют прекрасный.

Каково различие между этими двумя? И почему первый, главным образом использовал/предпочитал?

5
задан hultqvist 7 June 2010 в 22:19
поделиться

3 ответа

Вторая форма (неявное преобразование из группы методов в тип делегата) не поддерживалась до C# 2, поэтому все учебники и т.д., написанные до 2005 года, использовали первую форму.

Кроме того, IIRC Visual Studio автоматически заполняет первую форму. Лично я предпочитаю вторую.

5
ответ дан 14 December 2019 в 01:02
поделиться

Вторая форма - это синтаксический сахар, который расширяется до первой формы с помощью магии компилятора.

Первый вариант может быть предпочтительнее, потому что тип события не скрыт в коде, и, следовательно, его легче читать в дальнейшем, но функционально (и с точки зрения IL) они одинаковы.

2
ответ дан 14 December 2019 в 01:02
поделиться

Именно удаление обработчиков событий вдохновило на сахар:

 button1.Click -= new System.EventHandler(this.button1_Click);

Использование new для удаления обработчика событий? Да.

Даже полный синтаксис конструктора делегата - это сахар. Делегату нужен метод и цель. Цель назначается автоматически, без вашего указания. Это будет "this". Немного жаль, но это скрывает тот факт, что подписка на событие добавляет ссылку на объект вашего класса, что может уберечь его от сборки мусора. Это явно выражено в синтаксисе C++/CLI:

 button1->Click += gcnew System::EventHandler(this, &button1_Click);

с тем интересным поворотом, что вы можете подписаться на метод обработки события другого объекта или класса. Не то чтобы это часто использовалось.

2
ответ дан 14 December 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: