Object Equals: ¿cuál es la lógica básica para objetos puros o tipos de referencia que no anulan Equals?
Llegué aquí después de leeresta y no encontré una respuesta relevante. Por lo tanto, no marque esto como un duplicado hasta que lea la pregunta completa.
He estado usando un reflector y examinéObject.Equals
Lo que vi es:
[__DynamicallyInvokable, TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
public virtual bool Equals(object obj)
{
return RuntimeHelpers.Equals(this, obj);
}
YRuntimeHelpers.Equals
Se ve como esto:
// System.Runtime.CompilerServices.RuntimeHelpers
/// <summary>Determines whether the specified <see cref="T:System.Object" /> instances are considered equal.</summary>
/// <returns>true if the <paramref name="o1" /> parameter is the same instance as the <paramref name="o2" /> parameter, or if both are null, or if o1.Equals(o2) returns true; otherwise, false.</returns>
/// <param name="o1">The first object to compare. </param>
/// <param name="o2">The second object to compare. </param>
[SecuritySafeCritical]
[MethodImpl(MethodImplOptions.InternalCall)]
public new static extern bool Equals(object o1, object o2);
Ahora no puedo ver la implementación deRuntimeHelpers.Equals
pero por la descripción, si ambos objetos no son la misma instancia y no son nulos, llamará alobject.Equals
método de nuevo y me pondría en un bucle (estoy hablando deobjetos puros)
Cuando digo objetos puros quiero decir algo como esto:
object pureObj1 = new object();
object pureObj2 = new object();
bool areEql = pureObj1.Equals(pureObj2);
Por documentación esto debería llamarObject.Equals
y obtener unstackoverflow recusivo. Supongo que tal vez la documentación es incorrecta y esto verificaigualdad de referencia para objetos básicos, pero quería estar seguro.
Línea de fondo:
Al comparar dos objetos puros (por ejemplo, no lanzar una cadena en el objeto) a través de unEquals
llamada: ¿cómo determina si son iguales? - ¿Qué pasa si no anulo elEquals
método y llamoEquals
en dos objetos?
PD. ¿hay alguna forma de que pueda ver elRuntimeHelpers.Equals
¿código fuente?