.net - tipos - qué es un evento en visual basic y cuáles son
VB.NET: ¿Se generan eventos incluso si no hay controladores de eventos? (4)
Puede haber una pequeña cantidad de gastos generales, pero no me preocuparía. Ciertamente, la acción real va a ser el controlador de rendimiento.
Como nota al margen: levantar un evento sin controladores en C # hace que se produzca una excepción. VB.Net no tiene este problema :)
Tengo una clase que descarga, examina y guarda algunos archivos XML grandes. A veces quiero que la IU me diga qué está pasando, pero a veces usaré la clase e ignoraré los eventos. Así que he colocado líneas de código como este en una docena de lugares:
RaiseEvent Report("Sending request: " & queryString)
RaiseEvent Report("Saving file: " & fileName)
RaiseEvent Report("Finished")
Mi pregunta es esta: ¿estos eventos ralentizarán mi código si nada los está escuchando? ¿Van a disparar?
Mi propia respuesta:
En VB.NET, el evento NO se activa si no hay controladores configurados para escucharlo.
Hice un pequeño experimento donde el código que genera el evento pasa el resultado de una función, y esa función solo se ejecuta cuando hay un controlador de eventos configurado para manejar el evento.
RaiseEvent Report(GetMyString())
En otras palabras, estoy diciendo que la función GetMystring
anterior no se llama a menos que los controladores realmente existan.
No hay magia, el código que se esconde debajo de RaiseEvent hace exactamente lo que cabría esperar, itera a través de una colección de manejadores y ejecuta cada uno. La sobrecarga de verificar si hay controladores es trivial, no te preocupes por eso.
Si su VERDADERA pregunta es "Para ahorrar tiempo, ¿debo verificar que los eventos tengan manejadores antes de generar los eventos?" . . . entonces la respuesta es "No", no ganarás nada al hacer esto.
Además, no se preocupe por la optimización a menos que lo necesite (vea esta entrada de Wikipedia para ver por qué).
Re: Llamando GetMystring()
.
Sí, esto se relaciona con la forma en que planteas los eventos en C #, donde verificas la existencia de controladores antes de plantear el evento. P.ej:
if (MyEvent != null)
MyEvent(GetMyString())
Buen experimento por cierto :)
Si su VERDADERA pregunta es "Para ahorrar tiempo, ¿debo verificar que los eventos tengan manejadores antes de generar los eventos?" . . . entonces la respuesta es "No", no ganarás nada al hacer esto.
En C #, si no verifica el evento como nulo y no hay controladores registrados, obtendrá una NullReferenceException.