La surcharge de l'opérateur== rapport est Égal à()

Je suis en train de travailler sur un projet C# sur lequel, jusqu'à présent, j'ai utilisé des objets immuables et les usines afin de s'assurer que les objets de type Foo peut toujours être comparé pour l'égalité avec ==.

Foo les objets ne peut pas être changé une fois créé, et l'usine renvoie toujours le même objet pour un ensemble donné d'arguments. Cela fonctionne très bien, et tout au long de la base de code, nous supposons que == travaille toujours pour la vérification de l'égalité.

Maintenant, j'ai besoin d'ajouter quelques fonctionnalités qui présente un cas limite pour lequel cela ne fonctionne pas toujours. La meilleure chose à faire est de surcharge operator == pour ce type, de sorte qu'aucun autre code dans le projet qui doit changer. Mais ce qui me frappe comme une odeur de code: surcharge operator == et pas Equals semble juste bizarre, et je suis habitué à la convention qui == contrôles de référence de l'égalité, et Equals vérifie objet d'égalité (ou peu importe le terme).

Est-ce une préoccupation légitime, ou devrais-je simplement aller de l'avant et de surcharge operator ==?

  • D'ailleurs, vb.net interdit l'utilisation de ses = et <> opérateurs d'égalité pour les types qui ne sont pas explicitement les surcharges; pour vérifier la référence de l'égalité, on utilise Is ou IsNot, qui, essentiellement, <i>toujours</i> vérifier la référence de l'égalité (à l'exception notable lorsque l'on compare les types nullables pour Nothing).
InformationsquelleAutor JSBձոգչ | 2009-11-19