Bon, ca fait un petit bout de temps que je code en C# maintenant. Rien de trépidant en soi, mais suffisament pour avoir taté un peu de tout. Depuis le début, je suis émerveillé par le fait que C# sache exactement où je veux en venir quand je lui passe des parametres dans mes fonctions. Aujourd’hui, j’en suis arrivé au stade où j’aimerais comprendre la magie du truc. J’explique :
Admettons que j’ai une appli, composée de deux Form. Le MainForm, qui lance l’appli et un autre (appelons-le ParamForm), qui va par exemple permettre à l’utilisateur de changer les parametres de l’appli. Admettons maintenant que mes parametres sont stockés à la barbare dans un Dictionnary<string, string> nommé parametres avec la key qui contient le nom du parametre, et la value… sa valeur. (c’est un exemple hein, c’est juste pour illustrer ma question, venez pas me faire du hors sujet sur le fait que c’est sale).
Au moment ou je souhaite afficher le form avec les parametres, je fais un truc du genre :
ParamForm pf = new ParamForm(parametres);
pf.ShowDialog();
Avec le constructeur de ParamForm :
[code]private Dictionnary<string, string>parametres;
public Dictionnary<string, string> Parametres { get { return this.parametres; } }
public ParamForm(Dictionnary<string, string> parametres)
{
this.parametres = parametres;
}[/code]
Au début, j’avais imaginé qu’après mon pf.ShowDialog() y me faudrait faire un truc du genre this.parametres = pf.Parametres. Mais non ! Magie ! C# à compris comme un grand qu’en fait ca serait super cool qu’il passe non pas une référence de mon objet parametres, mais carrément un pointeur en douce sans que je me rende compte de rien. Moi ca m’arrange à fond d’ailleurs.
Là c’est le cas d’une classe, mais ca marche aussi avec des int par exemple. Tout ca c’est donc génial. Maintenant, admettons que je reve de faire une fonction Convert(), dans ParamForm, qui change les values de parametres pour les mettre dans un autre format, mais sans toucher aux valeurs de MainForm.parametres ? Comment je fais ? Et en fait, comment je sais que c# il balance une référence, un pointeur, whatever ? Accessoirement, je comprend pas super l’interet de rajouter un “out” ou un “ref” du coup.
Voyez le probleme ? Alors j’ai cherché sur le net, j’ai bien trouvé quelques trucs, mais rien qui m’a aidé à comprendre le binz. Ca manque de “je passe des parametres pour les nuls”, en fait. Mais j’aimerais vraiment comprendre. Si quelqu’un pouvais me faire un cours rapide pour les démeurés, ca serait super.
Merci B)