Bonjour, je débute en C# et en Poo, cela fait beaucoup pour un seul homme.
J'aimerais m'assurer que j'ai bien compris les concepts de base.
Je crée deux variables dont l'une est de type var. A celle-ci j'affecte une valeur double, puis j'affecte l'autre variable, d'un autre type (int).
La variable var devient équivalente à la variable int mais conserve son type de première affectation (double).
A être équivalentes (i1 == vari1 renvoit true, la méthode equals() pareil), ces deux variables n'en restent pas moins des objets (struct) distincts: pas le même hashcode.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14int i1 = 3; var vari1 =3.2; // vari1 est détecté double vari1 = i1; // vari1 reste double Console.WriteLine(vari1.Equals(i1)); //True Console.WriteLine("vari1: "+ vari1.ToString()+" " +vari1.GetType()); //3 double Console.WriteLine("i1: " + i1.ToString() + " " + i1.GetType()); // 3 int Console.WriteLine(i1.GetHashCode()+ " vari1 "+vari1.GetHashCode()); // hashcode différents bool hcode1 = i1.GetHashCode() == vari1.GetHashCode(); //false Console.WriteLine(hcode1.ToString()); //false Console.WriteLine(i1 == vari1);//True Console.Read();
Par contre, si j'affecte à la variable var le même type que l'autre variable (ici double), le comportement change radicalement: les deux variables deviennent le même objet (struc) puisqu'elles ont le même hashcode.
Ai-je bien tout compris ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11double i2 = 3; var vari2 = 3.2; //var est détecté double vari2 = i2; // i2 et vari2 ayant même type, ils deviennent le même object (ou struct) Console.WriteLine(vari2.Equals(i2)); //True Console.WriteLine("vari2: " + vari2.ToString() + " " + vari2.GetType()); //3 double Console.WriteLine("i2: " + i2.ToString() + " " + i2.GetType()); // 3 double bool hcode2 = i2.GetHashCode() == vari2.GetHashCode(); //true Console.WriteLine(hcode2.ToString());//true Console.WriteLine(i2 == vari2);//true
J'en doute car si je rajoute ces petits bouts de code à la fin:
i2 et vari2 redeviennent différents, ils n'ont plus le même hashcode.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9i1 = 4; vari1 = 5; Console.WriteLine("i1: " + i1 + " -- vari1: " + vari1); // 4 et 5 i2 = 4; vari2 = 5; Console.WriteLine("i2: " + i2 + " -- vari2: " + vari2); // 4 et 5 Console.WriteLine(i2.GetHashCode() + " " + vari2.GetHashCode()); // hashcode différents
D'avance, merci pour vos commentaires.







Répondre avec citation







,
et les
!), j'y suis allé un peu fort avec mon fainéant, mais je préfère tout de même qu'il n'y ai pas trop de var dans mon code, bref les gout et les couleurs quoi ...Mais ma remarque était plus dans le sens ou il est débutant, et je pense qu'un débutant devrait plutôt acquérir les bases avant de comprendre pleinement var, qui pour moi peut amener de la confusion, car justement il pourra changer la valeur sans vraiment se rendre compte que le type change, et ce que cela implique.
Partager