herencia en c#

20/01/2006 - 11:52 por carlos | Informe spam
hola
tengo una clase así
class A
{
public virtual void algo()
{
hazEsto();
}
}
y otra clase así
class B
{
public override void Algo()
{
base.algo();
HazEstoOtro();
}
}

Hay alguna forma de asegurarme de que si cuando se declara otra clase C
heredera de A y se redefine el método Algo(),
no compilará si no se añade el base.Algo() ?

Grácias

Preguntas similare

Leer las respuestas

#1 Angel J. Hernández M.
20/01/2006 - 15:16 | Informe spam
Hola Carlos, cómo estás? De verdad que no se entiende mucho tu pregunta. Sin
embargo, la clase B no está heredando de A por lo que la línea base.algo()
no está del todo bien. Si por favor puedes replantear tu pregunta te
podríamos ayudar gustosamente.

Saludos,

Angel J. Hernández M.
MCP - MCAD - MCSD - MCDBA
Microsoft MVP ASP/ASP.NET
http://groups.msn.com/desarrolladoresmiranda
http://www.consein.com


"carlos" wrote in message
news:ODknK%
hola
tengo una clase así
class A
{
public virtual void algo()
{
hazEsto();
}
}
y otra clase así
class B
{
public override void Algo()
{
base.algo();
HazEstoOtro();
}
}

Hay alguna forma de asegurarme de que si cuando se declara otra clase C
heredera de A y se redefine el método Algo(),
no compilará si no se añade el base.Algo() ?

Grácias


Respuesta Responder a este mensaje
#2 carlos
20/01/2006 - 16:17 | Informe spam
perdón! Me he dejado lo importante
Si. En realidad B hereda de A

class A
{
public virtual void Algo()
{
hazEsto();
}
}

y otra clase así
class B: A
{
public override void Algo()
{
base.Algo();
HazEstoOtro();
}
}


"Angel J. Hernández M." escribió en el mensaje
news:%
Hola Carlos, cómo estás? De verdad que no se entiende mucho tu pregunta.


Sin
embargo, la clase B no está heredando de A por lo que la línea base.algo()
no está del todo bien. Si por favor puedes replantear tu pregunta te
podríamos ayudar gustosamente.

Saludos,

Angel J. Hernández M.
MCP - MCAD - MCSD - MCDBA
Microsoft MVP ASP/ASP.NET
http://groups.msn.com/desarrolladoresmiranda
http://www.consein.com


"carlos" wrote in message
news:ODknK%
> hola
> tengo una clase así
> class A
> {
> public virtual void algo()
> {
> hazEsto();
> }
> }
> y otra clase así
> class B
> {
> public override void Algo()
> {
> base.algo();
> HazEstoOtro();
> }
> }
>
> Hay alguna forma de asegurarme de que si cuando se declara otra clase C
> heredera de A y se redefine el método Algo(),
> no compilará si no se añade el base.Algo() ?
>
> Grácias
>
>


Respuesta Responder a este mensaje
#3 carlos
20/01/2006 - 16:27 | Informe spam
Imaginemos que alguien crea una clase C que hereda de A. Y en C, redefine el
método Algo() (virtual en A)
Lo que pregunto es si hay forma de asegurar que el método Algo() redefinido
en C, llama SIEMPRE a base.Algo()

Método Algo() (de A)
{
hazEsto(); //esto es lo que quiero que se ejecute SIEMPRE desde los
métodos redefinidos en clase herederas de A
}
Metodo Algo() (de B)
{
base.Algo(); //ejecuta hazEsto(), y quiero asegurarme de que cualquier
clase que redefina este método lo ejecute
hazAquello();
}

Espero haberme hecho entender.
Grácias


"Angel J. Hernández M." escribió en el mensaje
news:%
Hola Carlos, cómo estás? De verdad que no se entiende mucho tu pregunta.


Sin
embargo, la clase B no está heredando de A por lo que la línea base.algo()
no está del todo bien. Si por favor puedes replantear tu pregunta te
podríamos ayudar gustosamente.

Saludos,

Angel J. Hernández M.
MCP - MCAD - MCSD - MCDBA
Microsoft MVP ASP/ASP.NET
http://groups.msn.com/desarrolladoresmiranda
http://www.consein.com


"carlos" wrote in message
news:ODknK%
> hola
> tengo una clase así
> class A
> {
> public virtual void algo()
> {
> hazEsto();
> }
> }
> y otra clase así
> class B
> {
> public override void Algo()
> {
> base.algo();
> HazEstoOtro();
> }
> }
>
> Hay alguna forma de asegurarme de que si cuando se declara otra clase C
> heredera de A y se redefine el método Algo(),
> no compilará si no se añade el base.Algo() ?
>
> Grácias
>
>


Respuesta Responder a este mensaje
#4 A.Poblacion
20/01/2006 - 16:35 | Informe spam
"carlos" wrote in message
news:ODknK%
hola
tengo una clase así
class A
{
public virtual void algo()
{
hazEsto();
}
}
y otra clase así
class B
{
public override void Algo()
{
base.algo();
HazEstoOtro();
}
}

Hay alguna forma de asegurarme de que si cuando se declara otra clase C
heredera de A y se redefine el método Algo(),
no compilará si no se añade el base.Algo() ?



Directamente tal como lo has hecho, no, no hay nada en el compilador para
obligarte a llamar al base.algo. Pero podrías cambiar la implementación
ligeramente, tal como te pongo más abajo. Lo que hacemos es que "algo" ya no
sea virtual, con lo que no se le puede hacer un override y todos los
llamantes llamarán al "algo" de la clase madre. A continuación añadimos un
"algo2", que es la función que es virtual y a la que se puede hacer un
override desde la clase hija (y la hacemos "protected" para que no se pueda
invocar desde fuera). De esa forma todas las llamadas tienen que pasar por
"algo" y hacen el "hazEsto", entes de saltar al "algo2" de la clase hija.

class A
{
public void algo()
{
hazEsto();
algo2();
}
protected virtual void algo2()
{
}
}

class B : A
{
protected override void algo2()
{
HazEstoOtro();
}
}
Respuesta Responder a este mensaje
#5 Octavio Hernandez
20/01/2006 - 19:50 | Informe spam
Carlos,

La respuesta es *NO*, no hay manera de garantizarlo.
Un diseño como el que te propone A.Poblacion ayuda a evitar ese problema.

Slds - Octavio

"carlos" escribió en el mensaje
news:
Imaginemos que alguien crea una clase C que hereda de A. Y en C, redefine
el
método Algo() (virtual en A)
Lo que pregunto es si hay forma de asegurar que el método Algo()
redefinido
en C, llama SIEMPRE a base.Algo()

Método Algo() (de A)
{
hazEsto(); //esto es lo que quiero que se ejecute SIEMPRE desde los
métodos redefinidos en clase herederas de A
}
Metodo Algo() (de B)
{
base.Algo(); //ejecuta hazEsto(), y quiero asegurarme de que cualquier
clase que redefina este método lo ejecute
hazAquello();
}

Espero haberme hecho entender.
Grácias


"Angel J. Hernández M." escribió en el mensaje
news:%
Hola Carlos, cómo estás? De verdad que no se entiende mucho tu pregunta.


Sin
embargo, la clase B no está heredando de A por lo que la línea
base.algo()
no está del todo bien. Si por favor puedes replantear tu pregunta te
podríamos ayudar gustosamente.

Saludos,

Angel J. Hernández M.
MCP - MCAD - MCSD - MCDBA
Microsoft MVP ASP/ASP.NET
http://groups.msn.com/desarrolladoresmiranda
http://www.consein.com


"carlos" wrote in message
news:ODknK%
> hola
> tengo una clase así
> class A
> {
> public virtual void algo()
> {
> hazEsto();
> }
> }
> y otra clase así
> class B
> {
> public override void Algo()
> {
> base.algo();
> HazEstoOtro();
> }
> }
>
> Hay alguna forma de asegurarme de que si cuando se declara otra clase C
> heredera de A y se redefine el método Algo(),
> no compilará si no se añade el base.Algo() ?
>
> Grácias
>
>






Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida