Voir le signe ? pour la question.
public class Person
{
public Int16 ID { get; private set; }
public string Name { get; private set; }
public List<Toy> Toys { get; private set; }
public Person(Int16 id, string name, List<Toy> toys)
{ ID = id; Name = name; Toys = toys; }
}
public class Toy
{
public string Name { get; private set; }
public Person Owner { get; private set; }
public Toy(Person owner, string name)
{ Owner = owner; Name = name; }
}
Le problème se situe au niveau du CTOR de la personne. Comment passer les jouets au cteur de la personne ? Le jouet a besoin d'un propriétaire dans le CTOR du jouet mais ce propriétaire n'a pas encore été construit.
Je comprends que je peux déplacer les jouets hors du CTOR de la personne et rendre le jeu public. Supposons que vous n'ayez que les jouets avec lesquels vous êtes né - le jeu privé a une utilité. Et je comprends que ce que je demande peut ne pas être possible.
Comme si quelqu'un s'en souciait vraiment, mais Toy n'a besoin de connaître que le nom de son propriétaire, je vais donc modifier Toys.
public class Toy
{
private Person owner;
private string ownerName;
public string Name { get; private set; }
public String OwnerName
{
get
{
if (!string.IsnullOrEmpty(ownerName)) return ownerName;
elseif (owner != null) return owner.Name;
else throw new exception("homelesstoy");
}
public Toy( string name, Person owner)
{
Name = name; Owner = owner;
// new toy need to write it to DB
}
public Toy( string name, string _ownerName)
{
Name = name; ownerName = _ownerName;
}
}
D'une certaine manière, c'est mieux. Si mon jouet est dans ma voiture et qu'ils ont mes clés, je ne veux pas qu'ils connaissent mon adresse. Avec mon nom, la police peut me trouver si la voiture est retrouvée.