Formularios Heredados.

21/04/2009 - 07:37 por Rafael Villaran. RAVIPE | Informe spam
Hola a todos.
He creado un formulario base para usarlo como plantilla en otros, que me
evite código repetido. Bien todo va perfecto salvo en una cuestión:

Dentro de este formulario base o plantilla he creado varios métodos. Me
gustaría que cuando yo cree un nuevo formulario que herede de este me obligue
a sobreescribir dichos métodos, aunque no ponga código.

Actualmente tengo los métodos en el base declarados como virtual y en
los formularios que heredan con override, pero esto no me obliga a crearlos.
Si no pongo uno de los métodos la aplicación no me peta.
También he creado una Intefaz que la referenciaba en el formulario base.
Como en este ya están declarados los métodos pués tampoco petaba. ¿Alguien
sabe si se puede hacer estos?.

Saludos a todos y gracias por vuestro tiempo.

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
21/04/2009 - 08:30 | Informe spam
"Rafael Villaran. RAVIPE"
wrote in message news:
Dentro de este formulario base o plantilla he creado varios métodos.
Me
gustaría que cuando yo cree un nuevo formulario que herede de este me
obligue
a sobreescribir dichos métodos, aunque no ponga código.

Actualmente tengo los métodos en el base declarados como virtual y en
los formularios que heredan con override, pero esto no me obliga a
crearlos.





Para esto existe la palabra "abstract". Los métodos que tienes como
"virtual" tienes que cambiarlos a "abstract", y para que eso compile, la
clase que los contiene también tiene que ser abstract. Con eso te obliga a
hacerles un override en las clases hijas. También vale para los métodos de
la interfaz, cuya implementación puedes igualmente marcar como abstracta.
Una pega: Si la clase base es un formulario windows, el diseñador de
Visual Studio ya no será capaz de abrir el formulario en modo diseño después
de marcarlo como abstracto. Es un fallo que tiene.
Respuesta Responder a este mensaje
#2 Rafael Villaran. RAVIPE
21/04/2009 - 09:06 | Informe spam
Alberto muchas gracias.
Veo que sigues ahí a pié de cañón.
Siempre aprendemos algo con tus comentarios.
El problema en este caso es que los métodos de la clase base tienen código
en el cuerpo y como tu saber, mejor que yo, en los métodos abstract no se
pueden implementar código.
De todas formas muchas gracias. Reviso el tema de la interfaz, que por
cierto antes me estaba funcionando y ahora no, veré que he cambiado, y con
esto creo que irá bien.
Un saludo.

"Alberto Poblacion" wrote:

"Rafael Villaran. RAVIPE"
wrote in message news:
>> Dentro de este formulario base o plantilla he creado varios métodos.
>> Me
>> gustaría que cuando yo cree un nuevo formulario que herede de este me
>> obligue
>> a sobreescribir dichos métodos, aunque no ponga código.
>>
>> Actualmente tengo los métodos en el base declarados como virtual y en
>> los formularios que heredan con override, pero esto no me obliga a
>> crearlos.

Para esto existe la palabra "abstract". Los métodos que tienes como
"virtual" tienes que cambiarlos a "abstract", y para que eso compile, la
clase que los contiene también tiene que ser abstract. Con eso te obliga a
hacerles un override en las clases hijas. También vale para los métodos de
la interfaz, cuya implementación puedes igualmente marcar como abstracta.
Una pega: Si la clase base es un formulario windows, el diseñador de
Visual Studio ya no será capaz de abrir el formulario en modo diseño después
de marcarlo como abstracto. Es un fallo que tiene.


Respuesta Responder a este mensaje
#3 Alberto Poblacion
21/04/2009 - 09:34 | Informe spam
"Rafael Villaran. RAVIPE"
wrote in message news:
Alberto muchas gracias.
Veo que sigues ahí a pié de cañón.
Siempre aprendemos algo con tus comentarios.
El problema en este caso es que los métodos de la clase base tienen código
en el cuerpo y como tu saber, mejor que yo, en los métodos abstract no se
pueden implementar código.



Bueno, si quieres forzar a que SIEMPRE se les haga un override, entonces
no tiene mucho sentido que contengan código, ya que ese código siempre va a
ser suplantado por el código de la clase hija y por lo tanto nunca se
ejecutará. El único caso en que podría ejecutarse es que en la clase hija
llamases a "base.ElMetodo". Pero para eso, basta con que el código en
cuestión lo muevas a un método distinto en la clase base (que puede ser
"protected" y no tiene por qué ser "virtual").
Respuesta Responder a este mensaje
#4 Rafael Villaran. RAVIPE
21/04/2009 - 10:52 | Informe spam
Bueno esto se me complica, pero ya lo tengo asumido, es que me gusta
complicarme. A ver si soy capaz de explicarme porque esto no me funciona como
yo quiero.

Efectivamente es un formulario win. Imáginate. Le pongo un botón de comando.
En el evento click llamo a un método, el que quiero reescribir en el hijo,
que realiza una serie de acciones dentro del base y me devuelve true o false
según respuestas del usuario. Este es el método que dentro del hijo debo, o
mas bien puedo reescribir, si lo necesito. Además este sería el método que si
no lo tiene el hijo, me gustaría me avisase para que al menos lo defina,
aunque no ponga código.

Gracias de nuevo.
Un saludo
rafael villaran


"Alberto Poblacion" wrote:

"Rafael Villaran. RAVIPE"
wrote in message news:
> Alberto muchas gracias.
> Veo que sigues ahí a pié de cañón.
> Siempre aprendemos algo con tus comentarios.
> El problema en este caso es que los métodos de la clase base tienen código
> en el cuerpo y como tu saber, mejor que yo, en los métodos abstract no se
> pueden implementar código.

Bueno, si quieres forzar a que SIEMPRE se les haga un override, entonces
no tiene mucho sentido que contengan código, ya que ese código siempre va a
ser suplantado por el código de la clase hija y por lo tanto nunca se
ejecutará. El único caso en que podría ejecutarse es que en la clase hija
llamases a "base.ElMetodo". Pero para eso, basta con que el código en
cuestión lo muevas a un método distinto en la clase base (que puede ser
"protected" y no tiene por qué ser "virtual").


Respuesta Responder a este mensaje
#5 Alberto Poblacion
21/04/2009 - 11:04 | Informe spam
"Rafael Villaran. RAVIPE"
wrote in message news:
Efectivamente es un formulario win. Imáginate. Le pongo un botón de
comando.
En el evento click llamo a un método, el que quiero reescribir en el hijo,
que realiza una serie de acciones dentro del base y me devuelve true o
false
según respuestas del usuario. Este es el método que dentro del hijo debo,
o
mas bien puedo reescribir, si lo necesito. Además este sería el método que
si
no lo tiene el hijo, me gustaría me avisase para que al menos lo defina,
aunque no ponga código.



Si lo he entendido bien, lo que quieres es en la clase hija poder hacer
un override, que no sea obligatorio, pero que si no lo haces te de un
Warning. ¿Es eso?
Pues en ese caso, me temo que la funcionalidad nativa de C# no te lo da.
Solo te da la posibilidad de marcar el método como virtual, en cuyo caso es
opcional hacerle un override, pero no da ningún aviso si no lo haces. O
marcarlo como abstracto, en cuyo caso es obligatorio hacer el override y te
da un error si no lo haces. No hay una opción intermedia.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida