Когда мы должны использовать этот оператор событиями? Каково его использование?
Так же, как += подписывает вас на обработчик события, -= отменяет подписку.
Используйте его, когда вы больше не хотите, чтобы определенный обработчик вызывался при возникновении события. Часто его нужно использовать только в том случае, если компонент, поднимающий событие, логически более долгоживущий, чем обработчик события - если вы не отписываетесь, "поднимающий событие" фактически имеет ссылку на обработчик, поэтому может поддерживать его в живом состоянии дольше, чем вы хотите.
Как отмечено в комментариях:
-=
удаляет только один обработчик; если подписано несколько обработчиков (даже с использованием одного и того же делегата), количество обработчиков уменьшится только на 1. Удаляется последний экземпляр указанного обработчика. (Таким образом, если у вас ранее были подписаны обработчики A, B, A, C в этом порядке, и вы удалили A, то в итоге останутся A, B, C.)-=
не вызывает ошибки, если указанный обработчик еще не подписан на делегат; он просто игнорирует запрос. Это верно, даже если событие не имеет обработчиков, подписанных на него в данный момент. Так же, как вы можете добавлять обработчики событий через + =
, вы можете удалить их через - =
.
Например:
mybutton.Click += new EventHandler(myhandler);
Вы можете позже удалить его следующим образом:
mybutton.Click -= new EventHandler(myhandler);
... потому что обработчики событий для одного и того же метода и экземпляра эквивалентны (поэтому вам не нужно сохранять ссылку на обработчик, который вы использовали с + =
и используйте его с - =
).
Операторы + =
и - =
могут использоваться в 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
.
Вы удаляете функцию Eventhandler. Самоучитель C#, события и делегаты