Bonjour,
Les variables qui ne sont pas des "types de base" sont, passés par réference si j'ai bien compris.
Je ne comprends pas, dés lors, l'utilité d'utiliser Ref dans le passage de variable ??
si quelqu'un pouvait m'éclairer
D'avance merci,
TSalm
Bonjour,
Les variables qui ne sont pas des "types de base" sont, passés par réference si j'ai bien compris.
Je ne comprends pas, dés lors, l'utilité d'utiliser Ref dans le passage de variable ??
si quelqu'un pouvait m'éclairer
D'avance merci,
TSalm
Salut,
deux principales utilités à ref, tout d'abord le passage de type valeur sans copie. Pour des grosses structures (car une struct se comporte comme ce que tu nommes un type de base (en fait un type valeur)) avec beaucoup d'appel en cascade (le traitement des messages windows en winform par exemple), ca peut etre interressant. Ensuite, cela permet (le mot clé ref) de forcer le passage d'un argument par reference, que celui ci soit un type valeur ou reference. Un code sera plus parlant :
ici, quand je passe ma variable a à ma methode sans le passer par ref et que j'instancie un nouveau A, au retour de la methode ma variable vaut toujours la meme chose (null ici), si tu es familier avec les pointeurs, c'est assez proche des pointeurs de pointeurs pour delegué l'allocation. A noter enfin, que pour le schema ci dessus, on utilisera pas ref mais out qui fait exactement la meme chose mais oblige la fonction à initialiser la variable.
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 public class Program { static void Main() { A a = null; Method(a); RefMethod(ref a); } static void RefMethod(ref A s) { s = new A("ref"); } static void Method(A s) { s = new A("normal"); } class A { string m_id; public A(string id) { m_id = id; } public override string ToString() { return m_id; } } }
Bon courage.
Partager