Object Equals - какова основная логика для чистых объектов или ссылочных типов, которые не переопределяют Equals?

Я попал сюда после прочтенияэтот и я не нашел соответствующего ответа - поэтому, пожалуйста, не помечайте это как дубликат, пока вы не прочитаете весь вопрос.

Я использовал отражатель и посмотрел вObject.Equals. То, что я видел, это:

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

А такжеRuntimeHelpers.Equals выглядит так:

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

Теперь я не вижу реализацииRuntimeHelpers.Equals но по описанию, если оба объекта не являются одним и тем же экземпляром и не равны нулю, он вызоветobject.Equals метод снова, и я бы попал в петлю (я говорю очистые предметы).

Когда я говорю чистые объекты, я имею в виду что-то вроде этого:

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

По документации это следует назватьObject.Equals и получитьрекурсивный стекопоток, Я думаю, что, возможно, документация не так, и это проверяетравенство ссылок для базовых объектов - но я хотел быть уверен.

Нижняя линия:
При сравнении двух чистых объектов (например, без приведения строки в объект) черезEquals вызов - как он определяет, равны ли они? - Что произойдет, если я не переопределюEquals метод и я называюEquals на двух объектах?
Постскриптум есть ли в любом случае, что я могу видетьRuntimeHelpers.Equals исходный код?

Ответы на вопрос(3)

Ваш ответ на вопрос