Sobreescribir metodo de una clase contenida en otra.

27/10/2003 - 13:26 por Jose Antonio | Informe spam
Hay alguna manera de poder sobreescribir un metodo de una clase que esta
contenida en otra?

Ejemplo:

Class Primaria{

Secundaria ejemplo=new Secundaria();

Metodo1{

Secundaria.Metodo();
}
}

Class Secundaria{

public virtual void Metodo{
}

}

Class AUtilizar : Primaria{

public override ejemplo : Metodo{
}

}

Es razonable lo que estoy diciendo?


Saludos
JoseAntonio

Preguntas similare

Leer las respuestas

#1 mickro
28/10/2003 - 03:21 | Informe spam
Claro, creo que puedes sobreescribir un metodo de una clase, siempre y
cuando este metodo sea virtual.

esto es lo que dice en el MSDN:
Utilice el modificador override para modificar un método, una propiedad, un
indizador o un evento. Los métodos de reemplazo proporcionan una nueva
implementación de un miembro heredado de una clase base. El método
reemplazado por una declaración override se conoce como método base
reemplazado. El método base reemplazado debe tener la misma firma que el
método de reemplazo.

No se puede reemplazar un método estático o no virtual. El método base
reemplazado debe ser virtual, abstract u override.

Una declaración override no puede cambiar la accesibilidad del método
virtual. Tanto el método de reemplazo como el método virtual deben tener el
mismo modificador de nivel de acceso.

No se pueden utilizar los siguientes modificadores para modificar un método
de reemplazo:

new static virtual abstract

Una declaración de propiedad de reemplazo debe especificar el mismo
modificador de acceso, tipo y nombre que la propiedad heredada, y la
propiedad reemplazada debe ser virtual, abstract u override.

Para obtener más información acerca del acceso a los miembros de una clase
base, vea 7.5.8 Acceso base.

Para obtener más información sobre cómo reemplazar métodos, vea 10.5.4
Métodos de reemplazo.





saludos

Mickro

"Jose Antonio" escribió en el mensaje
news:%
Hay alguna manera de poder sobreescribir un metodo de una clase que esta
contenida en otra?

Ejemplo:

Class Primaria{

Secundaria ejemplo=new Secundaria();

Metodo1{

Secundaria.Metodo();
}
}

Class Secundaria{

public virtual void Metodo{
}

}

Class AUtilizar : Primaria{

public override ejemplo : Metodo{
}

}

Es razonable lo que estoy diciendo?


Saludos
JoseAntonio


Respuesta Responder a este mensaje
#2 Tristan
28/10/2003 - 22:58 | Informe spam
No, no puedes hacer eso. La razón es que realmente no es que una clase esté
incluida en otra, sino simplemente que una clase "usa" la otra. Las dos
clases son totalmente independientes. Es algo así como la relación que hay
entre un coche y sus ruedas. No puedes modificar las ruedas modificando el
coche, por así decirlo. Tienes que poner otras ruedas.

En tu caso, puedes directamente sobreescribir el Metodo1() de la clase
Primaria, haciéndolo virtual previamente.

O bien crear una clase heredera de Secundaria que sobreescriba el método.
Sería un ejemplo de polimorfismo. Por ej.:

Class Primaria
{
protected Secundaria ejemplo = new Secundaria();

public void Metodo1()
{
ejemplo.Metodo();
}
}

Class Secundaria
{
public virtual void Metodo()
{
// Método 1
}
}

Class AUtilizar: Primaria
{
AUtilizar()
{
ejemplo = new Secundaria2(); // Cambiar las ruedas
}

Class Secundaria2: Secundaria
{
public override void Metodo()
{
// Método 2
}
}
}

Pero es muy importante cuando se define una jerarquía de clases, tener claro
el principio fundamental de la herencia: "B hereda de A, si puede decirse
que B es un A". Si no se hace así, aunque inicialmente pueda ahorrarse algo
de código, se llegan enseguida a situaciones extrañas.

Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#3 Jose Antonio
29/10/2003 - 09:50 | Informe spam
Gracias por la respuesta, es mas trabajo a realizar, pero es mas logica la
metodologia.

Jose Antonio.
"Tristan" escribió en el mensaje
news:
No, no puedes hacer eso. La razón es que realmente no es que una clase


esté
incluida en otra, sino simplemente que una clase "usa" la otra. Las dos
clases son totalmente independientes. Es algo así como la relación que hay
entre un coche y sus ruedas. No puedes modificar las ruedas modificando el
coche, por así decirlo. Tienes que poner otras ruedas.

En tu caso, puedes directamente sobreescribir el Metodo1() de la clase
Primaria, haciéndolo virtual previamente.

O bien crear una clase heredera de Secundaria que sobreescriba el método.
Sería un ejemplo de polimorfismo. Por ej.:

Class Primaria
{
protected Secundaria ejemplo = new Secundaria();

public void Metodo1()
{
ejemplo.Metodo();
}
}

Class Secundaria
{
public virtual void Metodo()
{
// Método 1
}
}

Class AUtilizar: Primaria
{
AUtilizar()
{
ejemplo = new Secundaria2(); // Cambiar las ruedas
}

Class Secundaria2: Secundaria
{
public override void Metodo()
{
// Método 2
}
}
}

Pero es muy importante cuando se define una jerarquía de clases, tener


claro
el principio fundamental de la herencia: "B hereda de A, si puede decirse
que B es un A". Si no se hace así, aunque inicialmente pueda ahorrarse


algo
de código, se llegan enseguida a situaciones extrañas.

Juan Carlos Badiola
MVP - C#


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