1) Como dijo Ray, anule Equals(object)
para garantizar la coherencia cuando se llama al método desde clases que no saben (estáticamente) que implementa IEquatable<T>
. Por ejemplo, las clases de colecciones no genéricas usarán Equals(object)
para realizar comparaciones. También debe anular GetHashCode()
.
2) La implementación de IEquatable<T>
no sobrecarga los operadores == y! = Automáticamente, pero no hay nada que lo impida, al igual que System.String
. Sin embargo, debe documentar esto muy claramente si lo hace, y tenga cuidado cuando haga comparaciones entre otros tipos de referencia (por ejemplo MyType y Object) que seguirán usando la comparación de identidad. Sospecho que no es una gran idea hacer esto a menos que vaya a ser un tipo muy usado en su código, donde todos se familiarizarán con él y donde el azúcar sintáctico de sobrecarga == realmente tendrá un impacto positivo en legibilidad.
por lo que cuando se trata de objetos, se supone == significa solo la misma dirección de memoria (misma instancia) – leora
Bastante. Más información aquí: http://msdn.microsoft.com/en-us/library/53k8ybth(VS.80).aspx –
No, use ReferenceEquals() para tal fin. El operador de igualdad (==) generalmente significa lo mismo, pero puede ser anulado (por ejemplo, para cadenas y similares). –