Какова цель / разница в использовании конструктора типа события - PullRequest
5 голосов
/ 08 июня 2010

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

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

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

button1.Click += this.button1_Click;

Которые также хорошо компилируются.

В чем разница между этими двумя? И почему первый в основном используется / предпочтен?

Ответы [ 3 ]

5 голосов
/ 08 июня 2010

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

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

2 голосов
/ 08 июня 2010

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

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

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

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

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

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

2 голосов
/ 08 июня 2010

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

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

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