Bonjour,

J'ai une classe Parent et une classe Child.
Parent contient une propriété Childs qui est une collection de Child.
Child contient une référence à Parent.

J'aimerais que l'utilisateur ne puisse ajouter des Child à Childs que en passant par la classe Parent. J'ai donc écris ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
    public class Parent
    {
        private List<Child> _ChildList = new List<Child>();
 
        public IEnumerable<Child> ChildList
        {
            get { return _ChildList; }
        }
 
        public void AddChild(Child c)
        {
            c.Parent = this;
            _ChildList.Add(c);
        }
    }
 
    public class Child
    {
        public Parent Parent { get; internal set; }
    }
Le problème est que n'importe quel classe de l'assembly peut modifier la propriété Parent de la classe Child alors que seulement la classe Parent devrait pouvoir le faire.

De plus, on peut modifier la propriété Childs sans passer par AddChild() en castant celle en List<Child>.

Y a t-il des solutions à ces problèmes ? Un design pattern ou autre ?

Merci d'avance.