ho una classe astratta BASEITEM dichiarati in questo modo:Utilizzo di farmaci generici in una relazione padre figlio
public abstract class BaseItem
{
public BaseItem Parent { get; protected set; }
public List<BaseItem> Children = new List<BaseItem>();
public abstract string Function1();
}
In sostanza, sto cercando di attuare un progetto in cui ogni elemento ha un genitore che sarà di un tipo specifico e i bambini che saranno di un tipo diverso.
Ad esempio, ItemA avrebbe figli di tipo ItemB. Quindi ItemB avrebbe un genitore di tipo ItemA e bambini tutti di tipo ItemC. ItemC avrebbe parent di ItemB e figli di tipo ItemD.
Ho pensato che sarebbe stato più corretto farlo utilizzando i generici per evitare lanci inutili poiché so che tipo genitore e figli saranno per ciascuna delle mie classi ereditate. Quindi mi è venuto in mente qualcosa del genere:
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>
{
}
Quindi due cose. 1. È un buon design? C'è un modo più semplice/migliore per farlo? Non mi piace usare una seconda classe base astratta solo per poter usare i generici. 2. Se mantengo questo, qual è il modo migliore di gestire i fini? (Cioè Itema non avere un genitore nel mio dominio problema reale, ma ha bisogno di un genitore per la compilazione. ItemD non ha figli, ma ho bisogno di dare qualcosa)
Questa domanda mi fa venire voglia di usare FORTRAN. – iandisme
il tuo esempio di codice ha 'public class ItemC: BaseItem ', ma probabilmente intendevi 'public class ItemC: BaseItem '. –