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
14 int 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
11 double 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
9 i1 = 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.
Partager