Crear clases Derivadas desde clase Base, ¿posible?

27/01/2006 - 14:04 por Paco Ferre | Informe spam
Hola a todos,

Partiendo de una situación que funciona, aunque es un ejemplo tonto.

public class Base
{
public virtual Base CrearNueva()
{
}
}

public class DerivadaPrimera : Base
{
public override Base CrearNueva()
{
return new DerivadaPrimera();
}
}

public class DerivadaSegunda : Base
{
public override Base CrearNueva()
{
return new DerivadaSegunda();
}
}
... (y un montón más).

¿Cómo podría hacerse para no tener que escribir el método
CrearNueva en cada una de las clases derivadas?, no me gusta escribir
código "copia-pega".

Algo así como:
public class Base
{
public virtual Base CrearNueva()
{
return new LACLASEDE(this);
}
}

Es solo una curiosidad, imagino que aquí entra Reflection... y hasta
aquí he llegao en mis 10 minutos de reflexión, jeje.

Muchas gracias,

Paco Ferre
MAD.NUG

Preguntas similare

Leer las respuestas

#1 Jose Luis Manners
27/01/2006 - 15:03 | Informe spam
No definas el método como virtual.

-
Coopera con el foro. Dinos si te sirvió la respuesta aquí planteada.
-

Saludos,

Jose Luis Manners, MCP
http://www.josemanners.com/

"Vale más saber alguna cosa de todo, que saberlo todo de una sola cosa."
-Blaise Pascal

"Paco Ferre" wrote in message
news:
Hola a todos,

Partiendo de una situación que funciona, aunque es un ejemplo tonto.

public class Base
{
public virtual Base CrearNueva()
{
}
}

public class DerivadaPrimera : Base
{
public override Base CrearNueva()
{
return new DerivadaPrimera();
}
}

public class DerivadaSegunda : Base
{
public override Base CrearNueva()
{
return new DerivadaSegunda();
}
}
... (y un montón más).

¿Cómo podría hacerse para no tener que escribir el método
CrearNueva en cada una de las clases derivadas?, no me gusta escribir
código "copia-pega".

Algo así como:
public class Base
{
public virtual Base CrearNueva()
{
return new LACLASEDE(this);
}
}

Es solo una curiosidad, imagino que aquí entra Reflection... y hasta
aquí he llegao en mis 10 minutos de reflexión, jeje.

Muchas gracias,

Paco Ferre
MAD.NUG
Respuesta Responder a este mensaje
#2 Octavio Hernandez
27/01/2006 - 19:36 | Informe spam
Paco,

a) Como dice Jose, no hace falta que CrearNueva() sea virtual, vas a usarla
"tal cual" para toda la jerarquía.
b) Efectivamente, hace falta reflexión, pero muy poquita:

public class Base
{

public Base CrearNuevo()

{

return (Base) Activator.CreateInstance(GetType());

}

public override string ToString()

{

return GetType().ToString();

}

}

public class Derivada : Base

{

}

// ejemplo...

private void button1_Click(object sender, EventArgs e)

{

Base b = new Derivada();

MessageBox.Show(b.CrearNuevo().ToString());

}

La única limitación para que esto funcione es que las clases tengan un
constructor sin parámetros (si no fuera así, también habría manera de
"buscarse la vida").

Salu2 - Octavio


"Paco Ferre" escribió en el mensaje
news:
Hola a todos,

Partiendo de una situación que funciona, aunque es un ejemplo tonto.

public class Base
{
public virtual Base CrearNueva()
{
}
}

public class DerivadaPrimera : Base
{
public override Base CrearNueva()
{
return new DerivadaPrimera();
}
}

public class DerivadaSegunda : Base
{
public override Base CrearNueva()
{
return new DerivadaSegunda();
}
}
... (y un montón más).

¿Cómo podría hacerse para no tener que escribir el método
CrearNueva en cada una de las clases derivadas?, no me gusta escribir
código "copia-pega".

Algo así como:
public class Base
{
public virtual Base CrearNueva()
{
return new LACLASEDE(this);
}
}

Es solo una curiosidad, imagino que aquí entra Reflection... y hasta
aquí he llegao en mis 10 minutos de reflexión, jeje.

Muchas gracias,

Paco Ferre
MAD.NUG
Respuesta Responder a este mensaje
#3 Paco Ferre
30/01/2006 - 09:13 | Informe spam
Muy buena Octavio,

Verguenza me da por no haber mirado un poco más.

Muchas gracias,

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