Indications concernant l'implémentation de Equals et de l'opérateur d'égalité (==)
Mise à jour : novembre 2007
Les règles suivantes mettent en avant les indications pour implémenter la méthode Equals et l'opérateur d'égalité (==).
Implémentez la méthode GetHashCode chaque fois que vous implémentez la méthode Equals. Ainsi, les méthodes Equals et GetHashCode restent synchronisées.
Substituez la méthode Equals chaque fois que vous implémentez l'opérateur d'égalité (==), et faites en sorte qu'ils effectuent la même action. Cela permet au code d'infrastructure, tel que Hashtable et ArrayList qui utilisent la méthode Equals, de se comporter de la même manière que le code utilisateur écrit à l'aide de l'opérateur d'égalité.
Substituez la méthode Equals chaque fois que vous implémentez l'IComparable.
Envisagez d'implémenter la surcharge d'opérateur pour les opérateurs d'égalité (==), différent de (!=), inférieur à (<) et supérieur à (>) quand vous implémentez IComparable.
Ne levez pas d'exception à partir des méthodes Equals ou GetHashCode ou encore de l'opérateur d'égalité (==).
Pour des informations connexes sur la méthode Equals, consultez Implémentation de la méthode Equals.
Implémentation de l'opérateur d'égalité (==) sur des types valeur
La plupart des langages de programmation n'ont aucune implémentation par défaut de l'opérateur d'égalité (==) pour les types valeur. C'est pourquoi vous devez surcharger l'opérateur d'égalité (==) chaque fois que l'égalité est pertinente.
Envisagez d'implémenter la méthode Equals sur les types valeur, car l'implémentation par défaut sur System.ValueType ne donnera pas d'aussi bons résultats que votre implémentation personnalisée.
Implémentez l'opérateur d'égalité (==) chaque fois que vous substituez la méthode Equals.
Implémentation de l'opérateur d'égalité (==) sur des types référence
La plupart des langages proposent une implémentation par défaut de l'opérateur d'égalité (==) pour les types référence. C'est pourquoi vous devez être prudent en implémentant l'opérateur d'égalité (==) sur des types référence. La plupart des types référence, même ceux qui implémentent la méthode Equals, ne doivent pas substituer l'opérateur d'égalité (==).
Substituez l'opérateur d'égalité (==) si votre type est un type de base tel que Point, String, BigNumber, etc. Chaque fois que vous envisagez de surcharger les opérateurs d'addition (+) et de soustraction (-), vous devez aussi envisager de surcharger l'opérateur d'égalité (==).
Portions Copyright 2005 Microsoft Corporation. Tous droits réservés.
Portions Copyright Addison-Wesley Corporation. Tous droits réservés.
Pour plus d'informations sur les règles de conception, consultez le livre « Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries » de Krzysztof Cwalina et Brad Abrams, publié par Addison-Wesley, 2005.
Voir aussi
Concepts
Indications relatives à l'utilisation
Référence
Implémentation de la méthode Equals
Autres ressources
Instructions de conception pour le développement de bibliothèques de classes