Objetos iguais - qual é a lógica básica para objetos puros ou tipos de referência que não substituem os iguais?

Cheguei aqui depois de leresta e não encontrei uma resposta relevante. Portanto, não marque isso como duplicado até ler a pergunta toda.

Eu tenho usado um refletor e olhei paraObject.Equals.O que eu vi é:

[__DynamicallyInvokable, TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
public virtual bool Equals(object obj)
{
    return RuntimeHelpers.Equals(this, obj);
}

ERuntimeHelpers.Equals se parece com isso:

// 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);

Agora não consigo ver a implementação deRuntimeHelpers.Equals mas pela descrição, se os dois objetos não forem da mesma instância e não forem nulos, chamará oobject.Equals método novamente e eu entraria em um loop (eu estou falando sobreobjetos puros)

Quando digo objetos puros, quero dizer algo assim:

object pureObj1 = new object();
object pureObj2 = new object();
bool areEql = pureObj1.Equals(pureObj2);

Por documentação, isso deve chamarObject.Equals e pegue umfluxo de pilha recusativo. Eu acho que talvez a documentação esteja errada e isso verifiqueigualdade de referência para objetos básicos - mas eu queria ter certeza.

Bottom line:
Ao comparar dois objetos puros (por exemplo, não converter uma string no objeto) por meio de umEquals chamada - como determina se são iguais? - O que acontece se eu não substituir oEquals método e eu chamoEquals em dois objetos?
P.s. existe alguma maneira que eu possa ver oRuntimeHelpers.Equals Código fonte?

questionAnswers(3)

yourAnswerToTheQuestion