Herecia múltiple en C#

12/12/2003 - 14:54 por Joseca | Informe spam
Hola a todos,

sabría alguien decirme como poder hacer una herencia
múltiple en C#, de hecho tengo entendido que no es posible
aunque no estoy seguro. Una posible idea sería: Si
queremos que la clase C derive de A y B, podemos hacer que
B derive de A y a su vez C de B (A-->B-->C). Pero esto no
me sirve puesto que no quiero que B adquiera los métodos y
propiedades de A.
Alguna sugerencia ?????

Muchas gracias.

Preguntas similare

Leer las respuestas

#11 Marcelo Papalini
16/12/2003 - 15:18 | Informe spam
Una interfaces (como yo tb propuse) es una alternativa
para solucionar tu modelo si queres aplicar herencia
multiple.

Una herencia multiple MARCA un error en el modelo que se
quiere virtualizar. Si en tu modelo tenes una multiple
herencia refactoriza por que seguro (93,4 %) que esta MAL
mal modelado. una herencia multiple en un capricho o un
error grueso de concepto.

Los lenguajes que utilizan herencia multiple, mas que nada
por un tema de implementacion a "bajo nivel" , como en la
V.M solucionan el "bindig" dinamico o el doble dispacher o
esas cositas. No es para un modelo final de aplicaciones
de usuario !!!!!!!!!!!.

Para que se crearon las iterfaces ?. Las considero un
parche para tratar de solucionar errores que no
encontraron solucion en modelos de objetos. Una interfaces
es un protocolo de mensajes que cada uno puede hacer
referencia a uno o mas metodos. Cada clase requiere de un
protocolo, entonces crearon las interfaces, supongo por
que sus clases no eran clases, eran pseudos clases que no
tenian la habilidad de saber su protocolo, pseudos clases.
Como ejemplos las calses de Java , lastima que esta
palabra tambien fue usada en .net. Sebe que se encontraron
con el mismo problema no ?

ud, que piensan

Bye,













Nota :NDS.o.s !!!!!!!




He leído que a la herencia múltiple le dan como


alternativa to la
posibilidad de implementar múltiples interfaces, pero


aquello sólo ayuda
desde la perspectiva de los consumidores (quienes llaman


y hacen uso). Pero
no desde el punto de vista de la centralizar código.
La ventaja de la herencia es justamente para adquirir


*naturalmente*
características de otra clase (u otras si es múltiple).
Con las interfaces hay que hacer el "truco" de delegar


las características
heredadas o reescribirlas en cada implementador.

También he visto la quejas acerca de la herencia


múltiple... que los
ancestros podrían tener miembros iguales, que el orden de


llamadas de los
miembros ancestros, etc. etc.
Pero creo que esos problemas podrían resolverse si


se "recorta" la
problemática lo suficiente como para servir.
Ejemplos: Se podrá hacer herencia múltiple siempre y


cuando...
- Ninguno de los miembros comparta nombre (firma en


realidad: nombre, más
tipo y parámetros), ya sea de ancestros o descendiente.
- Se acepte un orden predefinido por estándar, o


explícitamente se indique
el órden de invocación de los miembros por cada ancestro.
- etc.
Saludos,

Néstor.

"Eugenio Serrano" <eugenios @ ndsoft.com.ar> wrote in


message
news:
Es verdad que no existe herencia multiple en c#, pero




tambien es verdad
que
una clase puede implementar multiples interfaces..

Saludos,
Eugenio Serrano
NDSoft Consultoria y Desarrollo
Voluntario INETA Latam - Comite Web


"Damian Bacalov" escribió en el




mensaje
news:
> No es posible la herencia múltiple en C#.
> La herencia múltiple ha traído muchas más




complicaciones que beneficios
en
> lenguajes como C++.
> Deberías poder resolver tu modelado de objetos sin




necesidad de herencia
> múltiple.
>
> Damian
>
>
>
> "Joseca" wrote in message
> news:0c5b01c3c0b7$6c2afa90$
> Hola a todos,
>
> sabría alguien decirme como poder hacer una herencia
> múltiple en C#, de hecho tengo entendido que no es




posible
> aunque no estoy seguro. Una posible idea sería: Si
> queremos que la clase C derive de A y B, podemos




hacer que
> B derive de A y a su vez C de B (A-->B-->C). Pero




esto no
> me sirve puesto que no quiero que B adquiera los




métodos y
> propiedades de A.
> Alguna sugerencia ?????
>
> Muchas gracias.
>
>






.

Respuesta Responder a este mensaje
#12 Marcelo Papalini
16/12/2003 - 15:23 | Informe spam
De esta forma podes hacer una linda ensalada de frutas
para las proximas fiestas.

VB5/6, glup !!!. Y todo esto de objetos que tenian ?. Solo
palabras sueltas como COM, etc .

No ?.

Ahora entiendo por que tantos errores de concepto.

Guille, cuanta gente visita tu sitio ?. No pensas que
estas confundiendo sin querer ?



hola,

algo de eso es lo que yo hacía con VB5/6 para "simular"


la herencia, además
implementaba las interfaces y hacía que se accediera a


esos métodos,
llamándolos desde objetos creados a partir de esas


variables.
http://www.mundoprogramacion.com/cl...RENCIA.HTM

Nos vemos.
Guillermo
Microsoft VB MVP desde 1997
Te invito a mi sitio dedicado al VB y más...
http://www.elguille.info/ (en construcción)
http://www.mundoprogramacion.com/
(puede que el correo usado sea anti-spam)


"JuanI" wrote in message
news:
CREO (soy nuevo en esto de objetos y C#) que para




simular una herencia
multiple se puede heredar de A, y dentro de la clase


nueva crear una instancia
de la clase C, y usar los metodos asi programando


metodos "adaptadores".

me explico? no se, es algo que se me ocurre.

Encontre esto, talvez te ayude:
If you come across a situation in which you want to use




multiple inheritance
(for
example wanting to have a ClockRadio class inherit from




both AlarmClock and
Radio),
you can get most of the desired behavior by using




containment. Containment
embeds a
member variable of the class you want to derive from.




Here this technique
calls for
adding both an AlarmClock and a Radio variable to the




ClockRadio class and
delegating
the wanted functionality to the appropriate private




member variable. This
technique also
works for single inheritance, but it is the only




workaround you have to mimic
multiple
inheritance in .NET - unless Microsoft surprises




everyone by adding multiple
inheritance in a subsequent version.
(Wiley - C# Bible)




Joseca wrote:

Hola a todos,

sabría alguien decirme como poder hacer una herencia
múltiple en C#, de hecho tengo entendido que no es




posible
aunque no estoy seguro. Una posible idea sería: Si
queremos que la clase C derive de A y B, podemos hacer




que
B derive de A y a su vez C de B (A-->B-->C). Pero esto




no
me sirve puesto que no quiero que B adquiera los




métodos y
propiedades de A.
Alguna sugerencia ?????

Muchas gracias.






.

Respuesta Responder a este mensaje
#13 Marcelo Papalini
16/12/2003 - 17:37 | Informe spam
Guillermo, lei tu articulo.

En la nota final del articulo que "recomndas"dice algo
asi :

"cómo se puede conseguir el Polimorfismo mediante la
implementación de interfaces, (al menos en VB); y esto no
es algo particular de Visual Basic"

Que ves cuando ve un martillo ?. .un clavo ?
Ahora cuando ves un zapato que ves ?..un cordon ?...

Un avion es un avion en medio de la pista quieto ?. O
recien es un avion, cuando esta en el aire ?. Un avion sin
voalr, lo puedo utilizar como una casa. Entonces que es un
avion o una casa (caundo no esta volando)?.

Otra pregunta , un pinguino es un ave ?,y por que no
vuela entonces ?. Tiene alas y todo !!!!

Un Martillo es un martillo cuando lo queres utillizar
para "clavar", "algo".
Ahora un zapato, no puede ser un martillo ?. En mi casa un
zapato es un Martillo, por que no tengo Martillo.
Ahora el zapato no tiene ninguna interzas del Martillo. El
zapto con sus propias caracteristicas tiene la posibilidad
de "martillar o clavar", en mi modelo o sea mi casa.
Cuando salgo de este (la calle) es un zapato.
El polimorfismo esta en martillar (clavar un clavo, usarlo
de seguridad personal, hacer ruido,etc poli formas de uso)
del zapato.

Ahora no entiendo por que decis que podes "solucionar" el
polimorfismo con las Interfaces ?.
Te pregunto si querer investigar nada de VB y lo poco que
se, trato de olvidarme dia a dia.

Te pregunto porque considero que es agregar un problema
mas "a tu solucion". Como vos decis es muy bueno "VER" las
limitaciones que tienen los lenguajes que usamos y6 yo
agrego que es muy sano, no querer caminar mas de lo que el
tajo de la pollera te deja.
El problema que veo, y te repito de mi comentario
anterior, de esta forma parece mas a una ensalada de fruta
que a un programa que aplica el paradigma de objetos.


hola,

algo de eso es lo que yo hacía con VB5/6 para "simular"


la herencia, además
implementaba las interfaces y hacía que se accediera a


esos métodos,
llamándolos desde objetos creados a partir de esas


variables.
http://www.mundoprogramacion.com/cl...RENCIA.HTM

Nos vemos.
Guillermo
Microsoft VB MVP desde 1997
Te invito a mi sitio dedicado al VB y más...
http://www.elguille.info/ (en construcción)
http://www.mundoprogramacion.com/
(puede que el correo usado sea anti-spam)


"JuanI" wrote in message
news:
CREO (soy nuevo en esto de objetos y C#) que para




simular una herencia
multiple se puede heredar de A, y dentro de la clase


nueva crear una instancia
de la clase C, y usar los metodos asi programando


metodos "adaptadores".

me explico? no se, es algo que se me ocurre.

Encontre esto, talvez te ayude:
If you come across a situation in which you want to use




multiple inheritance
(for
example wanting to have a ClockRadio class inherit from




both AlarmClock and
Radio),
you can get most of the desired behavior by using




containment. Containment
embeds a
member variable of the class you want to derive from.




Here this technique
calls for
adding both an AlarmClock and a Radio variable to the




ClockRadio class and
delegating
the wanted functionality to the appropriate private




member variable. This
technique also
works for single inheritance, but it is the only




workaround you have to mimic
multiple
inheritance in .NET - unless Microsoft surprises




everyone by adding multiple
inheritance in a subsequent version.
(Wiley - C# Bible)




Joseca wrote:

Hola a todos,

sabría alguien decirme como poder hacer una herencia
múltiple en C#, de hecho tengo entendido que no es




posible
aunque no estoy seguro. Una posible idea sería: Si
queremos que la clase C derive de A y B, podemos hacer




que
B derive de A y a su vez C de B (A-->B-->C). Pero esto




no
me sirve puesto que no quiero que B adquiera los




métodos y
propiedades de A.
Alguna sugerencia ?????

Muchas gracias.






.

Respuesta Responder a este mensaje
#14 Ariel Gimenez
16/12/2003 - 18:16 | Informe spam
Marcelo, mas alla de las ensaladas de frutas y errores de gramatica, me
parece bastante estupido de tu parte hablar con esa insolencia, mas todavia
conociendo todos la trayectoria y reconocimiento de el Guille.
Me parece que no hace falta ser tan agresivo.

salu2

"Marcelo Papalini" wrote in message
news:14ff901c3c3f2$dfcbe750$
Guillermo, lei tu articulo.

En la nota final del articulo que "recomndas"dice algo
asi :

"cómo se puede conseguir el Polimorfismo mediante la
implementación de interfaces, (al menos en VB); y esto no
es algo particular de Visual Basic"

Que ves cuando ve un martillo ?. .un clavo ?
Ahora cuando ves un zapato que ves ?..un cordon ?...

Un avion es un avion en medio de la pista quieto ?. O
recien es un avion, cuando esta en el aire ?. Un avion sin
voalr, lo puedo utilizar como una casa. Entonces que es un
avion o una casa (caundo no esta volando)?.

Otra pregunta , un pinguino es un ave ?,y por que no
vuela entonces ?. Tiene alas y todo !!!!

Un Martillo es un martillo cuando lo queres utillizar
para "clavar", "algo".
Ahora un zapato, no puede ser un martillo ?. En mi casa un
zapato es un Martillo, por que no tengo Martillo.
Ahora el zapato no tiene ninguna interzas del Martillo. El
zapto con sus propias caracteristicas tiene la posibilidad
de "martillar o clavar", en mi modelo o sea mi casa.
Cuando salgo de este (la calle) es un zapato.
El polimorfismo esta en martillar (clavar un clavo, usarlo
de seguridad personal, hacer ruido,etc poli formas de uso)
del zapato.

Ahora no entiendo por que decis que podes "solucionar" el
polimorfismo con las Interfaces ?.
Te pregunto si querer investigar nada de VB y lo poco que
se, trato de olvidarme dia a dia.

Te pregunto porque considero que es agregar un problema
mas "a tu solucion". Como vos decis es muy bueno "VER" las
limitaciones que tienen los lenguajes que usamos y6 yo
agrego que es muy sano, no querer caminar mas de lo que el
tajo de la pollera te deja.
El problema que veo, y te repito de mi comentario
anterior, de esta forma parece mas a una ensalada de fruta
que a un programa que aplica el paradigma de objetos.


hola,

algo de eso es lo que yo hacía con VB5/6 para "simular"


la herencia, además
implementaba las interfaces y hacía que se accediera a


esos métodos,
llamándolos desde objetos creados a partir de esas


variables.
http://www.mundoprogramacion.com/cl...RENCIA.HTM

Nos vemos.
Guillermo
Microsoft VB MVP desde 1997
Te invito a mi sitio dedicado al VB y más...
http://www.elguille.info/ (en construcción)
http://www.mundoprogramacion.com/
(puede que el correo usado sea anti-spam)


"JuanI" wrote in message
news:
CREO (soy nuevo en esto de objetos y C#) que para




simular una herencia
multiple se puede heredar de A, y dentro de la clase


nueva crear una instancia
de la clase C, y usar los metodos asi programando


metodos "adaptadores".

me explico? no se, es algo que se me ocurre.

Encontre esto, talvez te ayude:
If you come across a situation in which you want to use




multiple inheritance
(for
example wanting to have a ClockRadio class inherit from




both AlarmClock and
Radio),
you can get most of the desired behavior by using




containment. Containment
embeds a
member variable of the class you want to derive from.




Here this technique
calls for
adding both an AlarmClock and a Radio variable to the




ClockRadio class and
delegating
the wanted functionality to the appropriate private




member variable. This
technique also
works for single inheritance, but it is the only




workaround you have to mimic
multiple
inheritance in .NET - unless Microsoft surprises




everyone by adding multiple
inheritance in a subsequent version.
(Wiley - C# Bible)




Joseca wrote:

Hola a todos,

sabría alguien decirme como poder hacer una herencia
múltiple en C#, de hecho tengo entendido que no es




posible
aunque no estoy seguro. Una posible idea sería: Si
queremos que la clase C derive de A y B, podemos hacer




que
B derive de A y a su vez C de B (A-->B-->C). Pero esto




no
me sirve puesto que no quiero que B adquiera los




métodos y
propiedades de A.
Alguna sugerencia ?????

Muchas gracias.






.

Respuesta Responder a este mensaje
#15 Guillermo guille
16/12/2003 - 18:25 | Informe spam
Si alguien te vende un zapato que implementa la interfaz IMartillear, debería
asegurarse que sirva para eso... si no la implementa, seguro que acabarás con
el zapato roto... o al menos agujereado por el clavo...

Bromas aparte.
Seguramente esos conceptos son erróneos, pero son los que me han enseñado y los
que siguen enseñando:
El polimorfismo se puede conseguir mediante la implementación de interfaces o
mediante la derivación por herencia.
Si no es así... que cambien (o rectifiquen) la documentación de Visual Studio
.NET


Nos vemos.
Guillermo
Microsoft VB MVP desde 1997
Te invito a mi sitio dedicado al VB y más...
http://www.elguille.info/ (en construcción)
http://www.mundoprogramacion.com/
(puede que el correo usado sea anti-spam)


"Marcelo Papalini" wrote in message
news:14ff901c3c3f2$dfcbe750$
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida