Bonjour,

J'ai besoin de mieux comprendre ce qui se passe avec une variable de type StringBuilder qui a le mot clé ref devant son nom.

En effet, une variable de type StringBuilder est de type reference par défaut, quel est le besoin de rajouter le mot clé ref devant une variable de ce type?
Voici le code en question
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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

using System; 
using System.Text;

public static void Main(){


StringBuilder  sb0= new StringBuilder("essai0");

StringBuilder  sb1= new StringBuilder("essai1");

StringBuilder  sb2= new StringBuilder("essai2");
StringBuilder sb3;


Console.WriteLine("Dans fonction appelante avant appel: sb0={0}, sb1={1}, sb2={2}, sb0, sb1, sb2);


ChangeStringBuilder(sb0, sb1, ref sb2, out sb3); 

Console.WriteLine("Dans fonction appelante après appel: sb0={0}, sb1={1}, sb2={2}, sb3={3}", sb0, sb1, sb2, sb3);}

private static void ChangeStringBuilder(StringBuilder sbfo, StringBuilder sbf1, ref StringBuilder sbf2, out StringBuilder sbf3){

Console.WriteLine("Début fonction appelée:sbf0={0}, sbf1={1}, sbf2={2}", sbf0, sbf1, sbf2);
sbfo.Append("*****");
sbf1= new StringBuilder("essai1*****");
sbf2= new StringBuilder("essai2*****");
sbf3= new StringBuilder("essai3*****");

Console.WriteLine("Fin de fonction appelée : sbf0={0}, sbf1={1},  sbf2={2}, sbf3={3}", sbf0, sbf1, sbf2, sbf3);


}//fin de fonction

}//fin de Main

}//fin de classe
Le résultat de l'appel de la fonction ChangeStringBuilder(sb0, sb1, ref sb2, out sb3); est le suivant

Dans fonction appelante avant appel : sb0=essai0, sb1=essai1, sb2= essai2

Début fonction appelée : sbf0=essai0, sbf1= essai1, sbf2= essai2

Fin de fonction appelée : sbf0=essai0*****, sbf1=essai1*****, sbf2=essai2*****, sbf3= essai3*****

Dans fonction appelante après appel : sb0=essai0*****, sb1=essai1, sb2=essai2*****, sb3=essai3*****

Je ne comprends pas bien pourquoi sb1 n'est pas modifié alors que sb2 est modifié.

Merci beaucoup de votre aide.

Bien cordialement


new_wave