J'ai une classe Vector, et je testais le test unitaire suivant (en utilisant nUnit).Question de référence: quand deux objets sont-ils égaux?
1 Vector test1 = new Vector(new double[] { 6, 3, 4, 5 });
2 Vector test2 = test1;
3 Assert.AreEqual(test1, test2, "Reference test");
4 test2 = new Vector(new double[] { 3, 3, 4, 5 });
5 Assert.AreEqual(test1, test2, "Reference test");
Le premier test de la ligne 3 passe, mais le deuxième test de la ligne 5 échoue. Est-ce que test2 ne devrait pas pointer vers la même mémoire que test1, puisque j'ai fait la déclaration d'affectation à la ligne 2? Mon vecteur est défini comme une classe, donc c'est un type de référence. D'autre part, les tests suivants passent:
1 Vector test1 = new Vector(new double[] { 6, 3, 4, 5 });
2 Vector test2 = test1;
3 Assert.AreEqual(test1, test2, "Reference test");
4 test2[1] = 4;
5 Assert.AreEqual(test1, test2, "Reference test");
Est-ce que cela veut dire que, lorsque j'utilise le nouvel opérateur pour définir un nouvel objet, de vieilles missions ne sont plus valides? Toute autre explication (ou correcte - si je me trompe)?
Cette différence de comportement est * la programmation impérative * par rapport à la programmation réactive * * –
Michael Greene: Non, c'est la différence entre une référence et une valeur, et comment l'opérateur « = » est mis en œuvre. –
Wow !! C'était rapide - merci pour toutes les réponses. Après –