Что делает это означает в C#: использование - = оператор событиями?

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

7
задан masoud ramezani 2 March 2010 в 14:01
поделиться

4 ответа

Так же, как += подписывает вас на обработчик события, -= отменяет подписку.

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

Как отмечено в комментариях:

  • -= удаляет только один обработчик; если подписано несколько обработчиков (даже с использованием одного и того же делегата), количество обработчиков уменьшится только на 1. Удаляется последний экземпляр указанного обработчика. (Таким образом, если у вас ранее были подписаны обработчики A, B, A, C в этом порядке, и вы удалили A, то в итоге останутся A, B, C.)
  • -= не вызывает ошибки, если указанный обработчик еще не подписан на делегат; он просто игнорирует запрос. Это верно, даже если событие не имеет обработчиков, подписанных на него в данный момент.
16
ответ дан 6 December 2019 в 06:13
поделиться

Так же, как вы можете добавлять обработчики событий через + = , вы можете удалить их через - = .

Например:

mybutton.Click += new EventHandler(myhandler);

Вы можете позже удалить его следующим образом:

mybutton.Click -= new EventHandler(myhandler);

... потому что обработчики событий для одного и того же метода и экземпляра эквивалентны (поэтому вам не нужно сохранять ссылку на обработчик, который вы использовали с + = и используйте его с - = ).

8
ответ дан 6 December 2019 в 06:13
поделиться

Операторы + = и - = могут использоваться в C # для добавления / удаления обработчиков событий в / из одного из событий объекта:

// adds myMethod as an event handler to the myButton.Click event
myButton.Click += myMethod;

После выполнения вышеуказанного кода метод myMethod будет вызываться каждый раз при нажатии myButton .

// removes the handler
myButton.Click -= myMethod;

После выполнения вышеуказанного кода нажатие на myButton больше не будет вызывать myMethod .

3
ответ дан 6 December 2019 в 06:13
поделиться

Вы удаляете функцию Eventhandler. Самоучитель C#, события и делегаты

1
ответ дан 6 December 2019 в 06:13
поделиться
Другие вопросы по тегам:

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