mi immagino che un bambino può anche essere un genitore su tutta la linea (se ottiene fortunato ... o sfortunato, a seconda del punto di vista), quindi vorrei andare con qualcosa di simile:
IPerson
{
string Name {get; set;}
string LastName {get; set;}
// whatever else - such as sizeOfShoe, dob, etc
}
IHaveParents
{
// might wanna limit this to a fixed size
List<IPerson> Parents {get; set;}
}
IHaveChildren
{
List<IPerson> Children {get; set;}
}
IHaveSpouse
{
IPerson Spouse {get; set;}
}
public class DudeWithParentsAndChildren : IPerson, IHaveParents, IHaveChildren, IHaveSpouse
{
public void AskMoneyToParents(){throw new Exception("Implement me!");}
public void SlapChildren(){}
private void CheatOnSpouse(){}
// some other stuff that such a dude can do i.e. GoBowling
}
E potresti facilmente estenderlo come preferisci quando arrivano nuovi requisiti (credimi, lo faranno).
Aggiornamento: Quindi nel tuo caso, se si desidera solo un bambino ad avere genitori e viceversa faresti qualcosa di simile:
public class Child : IPerson, IHaveParents
{
public void AskMoneyToParents(){throw new Exception("Implement me!");}
}
public class Parent : IPerson, IHaveChildren, IHaveSpouse
{
public void SlapChildren(){}
private void CheatOnSpouse(){}
// some other stuff that such a dude can do i.e. GoBowling
}
questo modo, se si vuole avere un IHaveFriends l'interfaccia che puoi (che sostanzialmente costringe l'implementatore a esporre un elenco di IPerson come una proprietà chiamata Amici). Se non ne hai bisogno, non farlo, ma il fatto che puoi facilmente farlo aggiungendo un'interfaccia e tutto il resto rimane lo stesso significa che hai un modello estensibile abbastanza decente (non necessariamente il migliore, sai ciò che intendo).
L'immagine è mancante ... Puoi postare l'immagine su imgur invece di fare un riferimento al link Dropbox? – Sometowngeek