Cita:
Empezado por José Luis Garcí
Bueno es que me corrigas Neftali, gracias a ello procurare no cometer ese error.
|
Bueno, he de decir que mi afirmación no fue exacta 100%.
He leído mimensaje y creo que ha quedado un poco en el aire, así que intentaré explicarlo mejor.
(1º) Derivar un componente y utilizar (sobreescribir) eventos.
En el mensaje anterior dije que esto
nunca se debía hacer; Tal vez debería haber dicho que
no se debe hacer a no ser que no exista otra opción (NOTA1).
En problema de utilizar ventos, es que si lo hacemos tal cual y el programador final utiliza ese evento, se perderá la programación qu nosotros hemos hecho en el. Un evento no es más que un puntero a una función. Si utilizamos ese puntero corremos el riesgo de que el programador final lo vuelva a utilizar y ese único puntero llevará a su función en lugar de a la nuestra.
SOLUCIÓN: Si no hay otro remedio, lo que hay que hacer es crear un puntero auxiliar que apunte a la original y luego programar la nuestra; Y desde la nuestra llamar a la original.
En este hilo hay un par de ejemplos de cómo hacerlo explicados.
(2º) Qué utilizar en lugar de los eventos.
Lo normal es utilizar los
métodos definidos como virtuales/abstract en las clases base (que son para eso) o capturar los
mensajes de windows.
Si no hubiera métodos virtuales para sobreescribir, ni mensajes para capturar es el único caso en que se puede utilizar el método 1.
NOTA1: De todas formas comentar (es una opinión personal) que si llegamos al punto de necesitar usar el punto (1º), deberíamos plantearnos si el diseño del componente que estamos haciendo es el correcto.