¿Herencia, interfaz, o reflection?

17/03/2007 - 06:15 por Marianoh | Informe spam
Hola a todos:

Tengo una clase A cuyo objetivo es contener una colección de clases
B, y otra de clases A, las cuales contienen una colección de clases B,
una de clases A...y etc, en fín: una estructura de árbol n-ario.

La clase A también contiene un método que devuelve una colección de
todas las B propias y de sus descendientes.

En principio declaré un System.Collections.Generic.List<B> dentro
de la clase A expuesta como propiedad, por lo que con
"A.misDescendientesB()", obtengo la colección.

Mi problema: El diseño falla en el momento en que a partir de un
objeto B necesito obtener el objeto A que lo contiene. Una analogía
sería un objeto XmlNode (B) con su propiedad OwnerDocument (que
retorna el XmlDocument (A) que lo contiene), eso es lo que yo
necesito.

Todavía estoy a tiempo de hacer algún cambio de mediana
envergadura, por lo que quisiera su opinión sobre la mejor manera de
implementar esta funcionalida.
No se si importa pero como la función de B es solo contener datos,
me gustaría que fuera una estructura, lo mismo, si es factible, que A.

Agradezco sus comentarios.

Preguntas similare

Leer las respuestas

#6 Diego Jancic
20/03/2007 - 01:23 | Informe spam
On Mar 19, 7:44 pm, "Marianoh" wrote:
Gracias Diego.

Ya había probado de heredar de List, pero no puedo sobreescribir el
método Add.

Bueno, a esta altura me parece que lo más lógico es implementar toda
la interfaz.

Gracias por tus consejos.

Saludos



buu... supuse que no se iba a poder, pero... ;)
Respuesta Responder a este mensaje
#7 Marianoh
20/03/2007 - 02:33 | Informe spam
Epa, he investigado un poco más y en realidad si se puede, pero con un
modificador

Lo que hago es utilizar internamente en la clase A una nueva clase
"BList", esta hereda de List<B> y sobreescribe el método Add con la
palabra "new" (en realidad lo estoy haciendo en vb y utilizo
"Shadows", que no es exactamente lo mismo, pero creo que con "new" de
C# tiene que andar bien, aunque me parece que hay que pisar las 3
sobrecargas del constructor de List<T>)

Esta clase BList tiene una propiedad Parent que la setea cada clase A
al instanciarla, y listo, en la sobrescritura del método Add seteo la
propiedad Parent de cada clase B.

Esto funciona bien, aunque igual me parece un poco desprolijo,
realmente me gustaría saber con que diseño se implementa la propiedad
Parent en los objetos que van contenidos en colecciones, como los
XmlNodes.

Por lo pronto esto "camina".

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