que tengo una clase abstracta artículo base declarados como esto:Uso de los genéricos en una relación padre-hijo
public abstract class BaseItem
{
public BaseItem Parent { get; protected set; }
public List<BaseItem> Children = new List<BaseItem>();
public abstract string Function1();
}
Básicamente, estoy tratando de implementar un diseño en el que cada artículo tiene un padre que será de un tipo específico y niños que serán de un tipo diferente.
Por ejemplo, ITEMA tendría los niños de todo tipo de ItemB. Entonces, ItemB tendría un elemento primario de tipo ItemA y elementos secundarios de tipo ItemC. ItemC tendría el padre del ItemB y los hijos del tipo ItemD.
pensé que sería más ordenado a hacerlo usando genéricos para evitar moldes innecesarios ya que sé qué tipo es el padre y los hijos serán para cada una de mis clases heredadas. Así que se me ocurrió algo como esto:
public abstract class AbstractBase
{
public abstract string Function1();
}
public abstract class BaseItem<T1, T2> : AbstractBase
where T1 : AbstractBase
where T2 : AbstractBase
{
public T1 Parent { get; protected set; }
public List<T2> Children = new List<T2>();
}
public class ItemA : BaseItem<ItemA, ItemB>
{
}
public class ItemB : BaseItem<ItemA, ItemC>
{
}
public class ItemC : BaseItem<ItemB, ItemD>
{
}
public class ItemD : BaseItem<ItemC, ItemD>
{
}
Dos cosas. 1. ¿Es este un buen diseño? ¿Hay una manera más simple/mejor de hacer esto? Realmente no me gusta usar una segunda clase base abstracta solo para poder usar genéricos. 2. Si guardo esto, ¿cuál es la mejor manera de manejar los extremos? (es decir, ItemA no tiene un padre en mi dominio de problema real, pero necesita un padre para compilar. ItemD no tiene hijos, pero necesito darle algo)
Esta pregunta me hace querer usar FORTRAN. – iandisme
su ejemplo de código tiene 'clase pública ItemC: BaseItem ', pero probablemente significó 'clase pública ItemC: BaseItem '. –