¿Cuándo debemos usar este operador por eventos? ¿Cuál es su uso?¿Qué significa en C#: usar - = operador por eventos?
Respuesta
Así como + = te suscribe un controlador al evento, - = anula la suscripción.
Úselo cuando ya no desee que se llame a un controlador en particular cuando se produce un evento. A menudo solo necesita usarlo, el componente que plantea el evento es lógicamente más duradero que el controlador del evento: si no cancela la suscripción, el "evento que lo convoca" tiene efectivamente una referencia al manejador, por lo que puede mantenerlo activo durante más tiempo que usted quiere.
Como se señala en los comentarios:
-=
sólo quitar un único controlador; si hay varios manejadores suscritos (incluso usando exactamente el mismo delegado), solo reducirá el conteo del manejador en 1. La última instancia del manejador especificado es la eliminada. (Por lo tanto, si anteriormente tenía los manipuladores A, B, A, suscritos en ese orden y eliminado A, terminaría con A, B, C.)-=
no causa un error si el manejador especificado no está suscrito al delegado ya; simplemente ignora la solicitud. Esto es cierto incluso si el evento no tiene controladores suscritos en este momento.
Elimina la función del manejador de eventos. C# Tutorial, Events and Delegates
Al igual que puede agregar controladores de eventos a través de +=
, puede eliminarlos a través de -=
.
Por ejemplo:
mybutton.Click += new EventHandler(myhandler);
posteriormente puede eliminar de esta manera:
mybutton.Click -= new EventHandler(myhandler);
... porque los controladores de eventos para el mismo método y la instancia son equivalentes (por lo que no es necesario retener una referencia al manejador que usó con +=
y usar esa con -=
).
Los +=
y -=
operadores pueden utilizarse en C# para añadir/eliminar controladores de eventos a/desde uno de los eventos de un objeto:
// adds myMethod as an event handler to the myButton.Click event
myButton.Click += myMethod;
Después de ejecutar el código anterior, el método myMethod
será llamado cada vez myButton
se hace clic.
// removes the handler
myButton.Click -= myMethod;
Después de ejecutar el código anterior, al hacer clic en myButton
ya no causar myMethod
a ser llamado.
Sospecho que la lógica de fondo de + = es para agregar el controlador a una lista/matriz de manejadores de eventos para el evento dado. Cuando se usa - =, compara su argumento de la mano derecha con la lista de controladores de eventos que tiene para este evento y lo elimina de la lista. Si haces múltiples + = para un evento dado, se llamará a cada controlador.
Dicho de manera diferente: + = significa agregar un método a la lista de métodos para llamar cuando se produce el evento. - = significa eliminar el método especificado de la lista de métodos para llamar.
Si se eliminan todos, el evento no tendrá controladores y el evento será ignorado.
- 1. ¿Por qué usar Eventos?
- 2. ¿Qué hace? operador significa en C#?
- 3. ¿Qué significa el operador '=>' en C#?
- 4. ¿Qué significa este operador?
- 5. ¿Qué significa el operador C# =>?
- 6. ¿Qué significa^= en c/C++?
- 7. ¿Qué significa el operador>? =?
- 8. ¿Qué significa el operador `#` en Scala?
- 9. ¿por qué preferimos? a ?? operador en C#?
- 10. ¿Qué significa este ~ operador aquí?
- 11. ¿Por qué usar String.Concat() en C#?
- 12. ¿Qué significa el operador #^en Clojure?
- 13. ¿Qué significa '??' significa en C#?
- 14. ¿Qué significa el operador || = en Ruby?
- 15. ¿Qué significa! == operador de comparación en PHP?
- 16. ?? Operador coalescente nulo -> ¿Qué significa coalescencia?
- 17. ¿Qué significa :: en C++?
- 18. ¿Qué significa esta sintaxis de C++ y por qué funciona?
- 19. ¿Qué significa la doble exclamación? ¿significa el operador?
- 20. ¿Qué significa el término "léxico" en C++?
- 21. ¿Qué significa ~ en C++?
- 22. ¿Qué significa ** en C
- 23. ¿Qué significa "&" en C++?
- 24. ¿Qué significa [,] en C#?
- 25. ¿Qué significa :: :: en C++?
- 26. ¿Por qué no hay operador || = en C/C++?
- 27. ¿Por qué usar c cadenas en C++?
- 28. ¿Qué significa el operador PHP = & mean?
- 29. ¿Qué significa, por ejemplo,% +% do? en R
- 30. ¿qué es el operador "??" en C#?
+1. También vale la pena mencionar que no cancelar la suscripción a un evento suele ser la causa de que un programa se quede sin memoria, ya que impide que los objetos se conviertan en elegibles para GC. – RichardOD
Jon, estoy un poco asustado por el hecho de que ambos comenzamos nuestras respuestas con "Así como ..." ;-) –
¿Cuál es la versión de VB.NET de '- =' ... Quiero decir cómo cancelar la suscripción de un evento..? – dotNETbeginner