1) Comme l'a dit Ray, remplacez Equals(object)
pour assurer la cohérence lorsque la méthode est appelée à partir de classes qui ne savent pas (statiquement) que vous implémentez IEquatable<T>
. Par exemple, les classes de collections non génériques utiliseront Equals(object)
pour les comparaisons. Vous devez également remplacer GetHashCode()
.
2) L'implémentation IEquatable<T>
ne surcharge pas les opérateurs == et! = Automatiquement, mais rien ne vous empêche de le faire, tout comme le fait System.String
. Vous devez documenter cela très clairement si vous faites, cependant - et soyez prudent lorsque vous faites des comparaisons entre d'autres types de référence (par exemple MyType et Object) qui utilisera toujours la comparaison d'identité. Je pense que ce n'est pas une bonne idée de le faire à moins que ce soit un type très utilisé dans votre code, où tout le monde connaîtra très bien et où le sucre syntaxique de surcharge == aura vraiment un impact positif sur lisibilité.
Ainsi, lorsque vous traitez avec des objets, == supposé ne signifier que la même adresse mémoire exacte (même instance) – leora
Assez. Plus d'informations ici: http://msdn.microsoft.com/en-us/library/53k8ybth(VS.80).aspx –
Non, utilisez ReferenceEquals() à cet effet. L'opérateur d'égalité (==) signifie généralement la même chose, mais peut être surchargé (par exemple pour Strings et similaires). –