Estoy trabajando en un proyecto C# en el que, hasta ahora, he usado objetos y fábricas inmutables para asegurar que los objetos de tipo Foo
siempre se puedan comparar por igualdad con ==
.Operador sobrecarga == versus Igual()
Foo
los objetos no se pueden cambiar una vez creados, y la fábrica siempre devuelve el mismo objeto para un conjunto determinado de argumentos. Esto funciona muy bien, y en toda la base de código suponemos que ==
siempre funciona para verificar la igualdad.
Ahora necesito agregar algunas funcionalidades que presenten un caso de borde 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 necesite cambiar. Pero esto me parece un olor a código: sobrecargar operator ==
y no Equals
me parece extraño, y estoy acostumbrado a la convención de que ==
comprueba la igualdad de referencia, y Equals
comprueba la igualdad de objeto (o cualquiera que sea el término).
¿Es esto una preocupación legítima, o debería seguir adelante y sobrecargar operator ==
?
A propósito, vb.net prohíbe el uso de sus operadores de igualdad '=' y '<>' para los tipos que no proporcionan sobrecargas explícitas; para verificar la igualdad de referencia, uno usa 'Is' o' IsNot', que esencialmente siempre comprueba la igualdad de referencia (siendo la principal excepción cuando se comparan tipos anulables a 'Nothing'). – supercat