Codigo heredado

16/01/2007 - 02:32 por Jose Camacho Vaca | Informe spam
Una consulta por favor.

Tenemos una serie de clases base para unos controles, digamos un textbox, al
cual le programamos cierto comportamiento, como por ejemplo a su evento leave.

El problema es que cuando usamos uno de esos controles en un formulario y le
ponemos código a algún evento, por ejemplo al leave, no sabemos a ciencia
cierta cual de los 2 códigos se ejecuta primero, si el del control o el de la
clase base.

Y para ser mas especificos ocupo que se ejecute primero el código del
control y después el que hereda de su clase base.

Espero haberme explicado. Les mando un saludo a todos.

José Camacho
Colima, MX.

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
16/01/2007 - 08:21 | Informe spam
"Jose Camacho Vaca" wrote in
message news:
Tenemos una serie de clases base para unos controles, digamos un textbox,
al
cual le programamos cierto comportamiento, como por ejemplo a su evento
leave.

El problema es que cuando usamos uno de esos controles en un formulario y
le
ponemos código a algún evento, por ejemplo al leave, no sabemos a ciencia
cierta cual de los 2 códigos se ejecuta primero, si el del control o el de
la
clase base.

Y para ser mas especificos ocupo que se ejecute primero el código del
control y después el que hereda de su clase base.



El orden lo controlas en tu código. Si en el OnLeave de tu clase hija
llamas primero a base.OnLeave y luego metes tu código, se ejecuta primero el
código de la clase base y luego el tuyo. Pero si pones primero tu código y
la llamada a base.OnLeave la pones al final de la rutina, el orden es al
contrario.
Respuesta Responder a este mensaje
#2 Alberto Poblacion
16/01/2007 - 17:15 | Informe spam
"Jose Camacho Vaca" wrote in
message news:
Disculpa la ignorancia, entonces el código de la clase base no se ejecuta
automáticamente?



Si haces un Override de una función de la clase base, entonces solo se
ejecuta el código de tu override, en lugar del de la función original
"overrideada". Si quieres ejecutar ambos, entonces dentro de tu función
tienes que llamar a la madre con base.LaFuncion.

cual sería el código de ejemplo digamos para el OnLeave que acabas de
mencionar.



Por ejemplo asi:

protected override void OnLeave(EventArgs e)
{
MessageBox.Show("Estoy en la Clase Hija antes de disparar el Leave");

base.OnLeave (e); //Esto ejecuta el OnLeave de la clase madre

MessageBox.Show("Estoy en la Clase Hija después de disparar el Leave");
}


Cuando dentro de tu control heredado se va a disparar el evento Leave, lo
que hacen las rutinas (de la clase madre) que lo disparan es llamar al
método OnLeave, en lugar de invocar directamente el delegado del evento.
Este método, que normalmente está en la clase madre, es el que invoca invoca
el delegado. La documentación de Microsoft recomienda que si quieres
interceptar el disparo del evento, en lugar de andar manipulando el delegado
de la clase madre, hagas un override del OnLeave (y lo mismo para los demás
eventos). Al existir un override, cuando es invocado desde la clase (madre o
hija), se ejecuta la versión más derivada, es decir, la de tu clase hija, la
cual puede (si quiere) hacer que se dispare el evento (antes o después de
hacer otras cosas) llamando a base.OnLeave.
Respuesta Responder a este mensaje
#3 Alfredo Crisostomo
16/01/2007 - 19:44 | Informe spam
Hola Jose,
Creo que eres de VFP como yo. Que distinto es esto, no ?;)
Lo que te dice el amigo Alberto equivale a:
-)que para reemplazar código en la clase heredada en vez de simplemente
escribir "encima" del método como hacemos en VFP, debes agregar la directiva
"override" en la redefinición.
-) Luego para ejecutar el codigo de la clase base (o "parent" para los
foxeros) , en vez de nuestro DODEFAULT() debes usar algo como:
base.Metodo (e); /*no se si hay algo para referenciar el nombre sin
tener que teclearlo*/
-)El NODEFAULT equivaldría simplemnte a no llamar nunca a "base.Metodo();"
dentro del codigo del override de "Metodo".

Espero haberte ayudado.
Yo siempre digo que deberia haber foros especiales de conversión por ej. de
VFP a C# o de Delphi a C#, o de VB a C# y asi por el estilo para facilitar
estos procesos tan complicados de conversion.

Saludos.


"Jose Camacho Vaca" escribió en
el mensaje news:
Disculpa la ignorancia, entonces el código de la clase base no se ejecuta
automáticamente?
cual sería el código de ejemplo digamos para el OnLeave que acabas de
mencionar.

Gracias por todo.

Saludos.
José Camacho
Colima, MX.

"Alberto Poblacion" wrote:

"Jose Camacho Vaca" wrote in
message news:
> Tenemos una serie de clases base para unos controles, digamos un
> textbox,
> al
> cual le programamos cierto comportamiento, como por ejemplo a su evento
> leave.
>
> El problema es que cuando usamos uno de esos controles en un formulario
> y
> le
> ponemos código a algún evento, por ejemplo al leave, no sabemos a
> ciencia
> cierta cual de los 2 códigos se ejecuta primero, si el del control o el
> de
> la
> clase base.
>
> Y para ser mas especificos ocupo que se ejecute primero el código del
> control y después el que hereda de su clase base.

El orden lo controlas en tu código. Si en el OnLeave de tu clase hija
llamas primero a base.OnLeave y luego metes tu código, se ejecuta primero
el
código de la clase base y luego el tuyo. Pero si pones primero tu código
y
la llamada a base.OnLeave la pones al final de la rutina, el orden es al
contrario.



Respuesta Responder a este mensaje
#4 Jose Camacho Vaca
17/01/2007 - 01:15 | Informe spam
Muchas gracias a ambos. Realmente C# es muy diferente de VFP y si estoy
sufriendo un poco con esto de la migración. Pero ni modo hay que aprender.

Me sirvio su ejemplo, les mando un saludo.
José Camacho
Colima, MX.

"Alfredo Crisostomo" wrote:

Hola Jose,
Creo que eres de VFP como yo. Que distinto es esto, no ?;)
Lo que te dice el amigo Alberto equivale a:
-)que para reemplazar código en la clase heredada en vez de simplemente
escribir "encima" del método como hacemos en VFP, debes agregar la directiva
"override" en la redefinición.
-) Luego para ejecutar el codigo de la clase base (o "parent" para los
foxeros) , en vez de nuestro DODEFAULT() debes usar algo como:
base.Metodo (e); /*no se si hay algo para referenciar el nombre sin
tener que teclearlo*/
-)El NODEFAULT equivaldría simplemnte a no llamar nunca a "base.Metodo();"
dentro del codigo del override de "Metodo".

Espero haberte ayudado.
Yo siempre digo que deberia haber foros especiales de conversión por ej. de
VFP a C# o de Delphi a C#, o de VB a C# y asi por el estilo para facilitar
estos procesos tan complicados de conversion.

Saludos.


"Jose Camacho Vaca" escribió en
el mensaje news:
> Disculpa la ignorancia, entonces el código de la clase base no se ejecuta
> automáticamente?
> cual sería el código de ejemplo digamos para el OnLeave que acabas de
> mencionar.
>
> Gracias por todo.
>
> Saludos.
> José Camacho
> Colima, MX.
>
> "Alberto Poblacion" wrote:
>
>> "Jose Camacho Vaca" wrote in
>> message news:
>> > Tenemos una serie de clases base para unos controles, digamos un
>> > textbox,
>> > al
>> > cual le programamos cierto comportamiento, como por ejemplo a su evento
>> > leave.
>> >
>> > El problema es que cuando usamos uno de esos controles en un formulario
>> > y
>> > le
>> > ponemos código a algún evento, por ejemplo al leave, no sabemos a
>> > ciencia
>> > cierta cual de los 2 códigos se ejecuta primero, si el del control o el
>> > de
>> > la
>> > clase base.
>> >
>> > Y para ser mas especificos ocupo que se ejecute primero el código del
>> > control y después el que hereda de su clase base.
>>
>> El orden lo controlas en tu código. Si en el OnLeave de tu clase hija
>> llamas primero a base.OnLeave y luego metes tu código, se ejecuta primero
>> el
>> código de la clase base y luego el tuyo. Pero si pones primero tu código
>> y
>> la llamada a base.OnLeave la pones al final de la rutina, el orden es al
>> contrario.
>>
>>
>>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida