décembre
2006
En me basant sur l’exemple de mon article précédent, nous allons étendre l’entité Répertoire.
– Pour un répertoire racine, nous devons spécifier le lecteur dans lequel ce répertoire est.
– Pour un sous-répertoire, nous devons spécifier le répertoire dans lequel ce sous-répertoire est.
Dans le cadre de cet exemple, nous imiterons les DataSet typés (c’est à dire, ne pas utiliser la POO :D): Ce lecteur/répertoire est spécifié en utilisant son identificateur (un entier, par exemple).
Par conséquent, nous aimerions créer ces deux constructeurs:
public Répertoire(int répertoireId, string nomSousRépertoire) {...}
Malheureusement, ceci n’est pas possible… (Doit-je expliquer pourquoi? :D)
Quelle est donc la solution?
J’ai d’abord pensé ajouter un paramètre factice, pour avoir différente signatures
Après un rapide « rougissement », J’ai examiné les autres possibilités:
– Changer l’ordre des paramètres (Plus de « rougissement »)
– Utiliser un booléen (Pas bien! Voir l’article précédent)
– Créer un constructeur prenant les deux identificateurs (comme entiers nullables):
Répertoire sousRépertoire = new Répertoire(null, répertoireId, nomSousRépertoire);
Je n’aime pas vraiment ça.
En fin de compte, j’ai créé un constructeur permettant de faire ceci:
Répertoire sousRépertoire = new Répertoire(répertoireId, nomSousRépertoire, RépertoireType.Sous);
Je suis néanmoins un peu gêné par cette solution parce que le sens du premier paramètre dépend de la valeur du troisième paramètre… Mais je ne vois pas une meilleure solution; est-ce que vous en connaissez une?
je comprends pas ton problème c: peut etre considéré comme un dossier au meme titre que c:dossierbidon
donc dans ce cas de figure y’a pas de question à se poser, une seule fonction suffit