C sharp - Llamada a superclase sin necesidad d invocar"base"

   
Vista:

Llamada a superclase sin necesidad d invocar"base"

Publicado por José Antonio (6 intervenciones) el 13/02/2010 22:26:09
Buenas a todos, tengo una duda en C# con respecto a su sistema de herencia:
Me gustaria implementar una clase con un método que aunque sea sobreescrito por una clase hija obligatoriamente tenga que ejecutar el codigo de la clase padre sin tener que poner al principio de la funcion base(x,y,....). Es posible hacer eso?

ejemplo:
Clase padre:
protected virtual void myfuncion (x,y)
{
m_var = "atext";
}

Clase hija:
protected override void myfuncion (x,y)
{
base.myfuncion(x,y) //esto es lo que quiero evitar, que no sea necesario esta llamada //para que se ejecute primero la funcion del padre
//lo que sea
}

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Llamada a superclase sin necesidad d invocar

Publicado por m (97 intervenciones) el 14/02/2010 02:23:33
que tal ,
No puedes hacerlo,
bueno primero no puedes poner como protected a los metodos virtuales.
segundo debes hacer la llamada porque cuando a una funcion virtual la
sobre escribes 'override' la estas declarando nuevamente.

Otra manera de que no declares a una funcion como virtual y
la re-declares puede ser de la siguiente manera

// metodo en clase base ( asi no lo harias publico)
protected void myfuncion (x,y)
{
m_var = "atext";
}

//metodo en la clase derivada
protected new void myfuncion (x,y)
{
base.myfuncion(x,y);

}

saludos.
//es una buena pregunta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Llamada a superclase sin necesidad d invocar

Publicado por m (97 intervenciones) el 14/02/2010 03:27:53
Pues siguiendo con lo mismo se me ocurrio una solucion
de una manera no tan explicita, y usando la declaracion de dos
metodos, si usas:

derivacion ejemplo=new derivacion();
ejemplo.Metodo2(x,y); // se ejecuta el metodo 1 tambien

//si solo quieres usar el de la clase derivada
ejemplo.Metodo1(x,y);//

//declaracion de las clases

public abstract class _base
{

public abstract void Metodo1(x,y);

public virtual void Metodo2(x,y)
{//con esto puedes poner tu codigo de la base que se ejecute antes o despues,
//del metodo de la clase derivada
Debug.Write("Ejecutando codigo en la base");
Metodo1(x,y);//llama al metodo que se declara en la clase derivada.
}

}
public class derivacion:_base
{
public override void Metodo1(x,y)
{
Debug.Write("\n Ejecutando codigo Derivado");
}

}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar