Básicamente hace tres cosas:
- comprobar la igualdad de referencia (return true si es así)
- Registro de nulidad de referencia (return false si bien el valor es nulo; por ahora la hipótesis nula == nulo caso se ha manejado)
- comprobar la igualdad de valor con
first.Equals(second)
El pedido no debe importa si ambos los valores tienen implementaciones de igualdad que se comportan bien, ya que la igualdad debe implementarse de manera que x.Equals(y)
implica y.Equals(x)
. Sin embargo, la documentación fuera de línea que tengo instalada indica que first.Equals (second) (u objA.equals (objB) para usar el nombre real de los parámetros) está especificado. El online documentation no menciona esto, curiosamente.
sólo para hacer todo esto concreto, la aplicación podría tener este aspecto:
public static bool Equals(object x, object y)
{
if (x == y) // Reference equality only; overloaded operators are ignored
{
return true;
}
if (x == null || y == null) // Again, reference checks
{
return false;
}
return x.Equals(y); // Safe as we know x != null.
}
Cabe destacar que la principal diferencia entre el 'Object.Equals' estático y el' first.Equals (second) virtual 'es que el último ** fallará ** si' first' es una referencia nula. –