none
Работа с событиями и делегатами RRS feed

  • Вопрос

  • 1). Какая разница между:

    c.Click += new EventHandler(mainFormButton_Click);
    
    

    и

    c.Click += mainFormButton_Click;
    
    

    2). Но подписка на событие еще пол беды, верно ли применение:

    c.Click -= new EventHandler(mainFormButton_Click);
    

     3). Средств языка для удаления всех событий (если сразу несколько) нет? И надо городить свой огород?

    • Изменено PhantomSL 23 марта 2010 г. 14:05 Снова
    • Перемещено Siddharth Chavan 1 октября 2010 г. 21:38 MSDN Forums Consolidation (От:Visual C#)
    23 марта 2010 г. 13:33

Ответы

  • 1. В .net 1 второй вид добавления обработчика не допускался. Такую форму синтаксиса ввели позже. В первом случае вы используете именованный тип делегата EventHandler, во втором - за ширмой создается делегат с такой же сигнатурой как у обработчика события.

    2. Да, верно, насколько знаю там сравниваются не значения ссылок самих делегатов, а названия и сигнатуры методов

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

    • Помечено в качестве ответа I.Vorontsov 24 марта 2010 г. 7:04
    23 марта 2010 г. 15:33