Operador de sobrecarga == versus Equals ()

Estoy trabajando en un proyecto de C # en el que, hasta ahora, he usado objetos y fábricas inmutables para garantizar que los objetos de tipoFoo Siempre se puede comparar para la igualdad con==.

Foo los objetos no se pueden cambiar una vez creados, y la fábrica siempre devuelve el mismo objeto para un conjunto dado de argumentos. Esto funciona muy bien, y en todo el código base asumimos que== Siempre funciona para comprobar la igualdad.

Ahora necesito agregar algunas funciones que presenten un caso perimetral para el que esto no siempre funcionará. Lo más fácil es sobrecargar.operator == para ese tipo, de modo que ninguno de los otros códigos en el proyecto deba cambiar. Pero esto me parece un olor a código: sobrecargaoperator == y noEquals Simplemente parece raro, y estoy acostumbrado a la convención de que== comprueba la igualdad de referencia, yEquals Verifica la igualdad de objetos (o cualquiera que sea el término).

¿Es esta una preocupación legítima, o debo seguir adelante y sobrecargar?operator ==?

Respuestas a la pregunta(6)

Su respuesta a la pregunta