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.
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
Ai-je bien tout compris ?

J'en doute car si je rajoute ces petits bouts de code à la fin:
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
i2 et vari2 redeviennent différents, ils n'ont plus le même hashcode.

D'avance, merci pour vos commentaires.