Me imagino que un niño también puede ser un padre en la línea (si tiene suerte ... o mala, dependiendo de los puntos de vista) así que me gustaría ir con algo como:
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
}
Y podría extenderlo fácilmente de la manera que desee cuando surjan nuevos requisitos (créanme que lo harán).
actualización: Así, en su caso si sólo se quiere que un niño tiene padres y al revés que haría algo como:
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
}
De esta manera si usted quiere tener un IHaveFriends interfaz que puede (lo que básicamente obliga al implementador a exponer una lista de IPersons como una propiedad llamada Friends). Si no lo necesitas, no lo hagas, pero el hecho de que puedes hacerlo fácilmente simplemente agregando una interfaz y todo lo demás permanece igual significa que tienes un modelo extensible bastante decente (no necesariamente el mejor, ya sabes lo que quiero decir).
Falta la imagen ... ¿Puede publicar la imagen en imgur en lugar de hacer una referencia al enlace de Dropbox? – Sometowngeek