Bonjour,
J'ai une classe qui va me servir de "conteneur" pour une autre classe.
Pour faire simple, j'ai une classe "Ingredient" et une classe "Recette".
Dans une "Recette", j'ai une liste d'ingrédients possible. Cette liste est propre à chaque instance de "Recette".
Lorsque, depuis une instance de "Recette", j'instancie un "Ingredient", je souhaite qu'il fasse obligatoirement partie de la liste prédéfinie dans l'instance de "Recette".
Voici ce qui pourrait se faire en code :
Code csharp : 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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 class Recette { readonly List<string> NomIngredients; public Recette(string[] inglst) { NomIngredients = new List<string>; foreach (string ing in inglst) { NomIngredients.Add(ing); } } public MettreUnIngredient(Ingredient ing, float quantite) { // On fait quelquechose avec l'ingrédient } public class Ingredient { private int Id; public Ingredient(string name) { for (int i = 0; i < context.NomIngredients.Count; i++) { if (context.NomIngredients[i] == name) { Id = i; return; } } throw new Exception("Cet ingrédient n'est pas pris en charge dans cette recette"); } } } Et ainsi, ailleurs dans le code : Recette PotAuFeu = new Recette(new string[] {"carotte", "poireau", navet", "paleron", "eau"}); PotAuFeu.MettreUnIngredient("poireau", 2); // Ok PotAuFeu.MettreUnIngredient("sucre", 0.3); // Plante, y'a pas de sucre dans un pot au feu
Actuellement, la seule solution que je connaisse, serait de passer en paramètre mon instance PotAuFeu au contructeur de Ingredient, histoire de se baser dessus lors de tous les tests. Mais je trouve ça lourd et pas clair.
Quand on ajoute un Button dans une Form par exemple, on ne passe pas l'instance de la Form dans le constructeur du Button. J'aimerais reproduire un peu ce comportement. J'espérait qu'en faisant des classes imbriquées, je pourrais trouver un mécanisme de contexte, mais pas trouvé![]()
Partager