Après avoir surchargé l'opérateur ==, comment comparer deux variables pointant sur le même objet?

StackOverflow https://stackoverflow.com/questions/617757

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);
}
Était-ce utile?

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

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é.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top