Après avoir surchargé l'opérateur ==, comment comparer deux variables pointant sur le même objet?
-
03-07-2019 - |
Question
Surcharge de l’opérateur de comparaison, comment comparer si les deux variables pointent sur le même objet (c’est-à-dire pas une valeur)
public static bool operator ==(Landscape a, Landscape b)
{
return a.Width == b.Width && a.Height == b.Height;
}
public static bool operator !=(Landscape a, Landscape b)
{
return !(a.Width == b.Width && a.Height == b.Height);
}
La solution
Utilisez la méthode statique Object.ReferenceEquals.
Bien entendu, pour que les méthodes == et! = conservent toutes leurs fonctionnalités, vous devez également redéfinir Equals et GetHashCode afin qu'elles renvoient un ensemble cohérent de réponses aux appelants.
Autres conseils
Essayez a.ReferenceEquals(b);
Pour vérifier si les deux pointent vers le même objet. Vous devez utiliser la méthode Object.ReferenceEquals. Il retournera true si les deux sont identiques ou si les deux sont nuls. Sinon, il retournera faux
Je sais que c'est une vieille question, mais si vous voulez surcharger la méthode == ou Object.Equals, vous devez également surcharger l'opérateur reverse! = =.
Et dans ce cas, puisque vous comparez des nombres internes, vous devriez surcharger les autres opérateurs de comparaison < ;, > ;, < =, > =.
Les personnes qui utiliseront votre classe à l'avenir, qu'il s'agisse de tiers consommateurs ou de développeurs prenant en charge votre code, peuvent utiliser quelque chose comme CodeRush ou Refactor, qui vont automatiquement & "Flip &". ; la logique (aussi appelée inverser le conditionnel) et ensuite l'aplatir, pour sortir du syndrome de 25 imbriqués. Si leur code le fait et que vous avez surchargé l'opérateur == sans surcharger l'opérateur! =, Le sens de votre code pourrait en être modifié.