You will not see the implementation of Object.Equals in .NET code. Calling this method in .NET calls native code. You can see the source of this method in clr source clr : https://github.com/dotnet/coreclr/blob/master/src/classlibnative/bcltype/objectnative.cpp#L153
// // Compare by ref for normal classes, by value for value types. // // <TODO>@todo: it would be nice to customize this method based on the // defining class rather than doing a runtime check whether it is // a value type.</TODO> // FCIMPL2(FC_BOOL_RET, ObjectNative::Equals, Object *pThisRef, Object *pCompareRef) { CONTRACTL { FCALL_CHECK; INJECT_FAULT(FCThrow(kOutOfMemoryException);); } CONTRACTL_END; if (pThisRef == pCompareRef) FC_RETURN_BOOL(TRUE); // Since we are in FCALL, we must handle NULL specially. if (pThisRef == NULL || pCompareRef == NULL) FC_RETURN_BOOL(FALSE); MethodTable *pThisMT = pThisRef->GetMethodTable(); // If it's not a value class, don't compare by value if (!pThisMT->IsValueType()) FC_RETURN_BOOL(FALSE); // Make sure they are the same type. if (pThisMT != pCompareRef->GetMethodTable()) FC_RETURN_BOOL(FALSE); // Compare the contents (size - vtable - sync block index). DWORD dwBaseSize = pThisRef->GetMethodTable()->GetBaseSize(); if(pThisRef->GetMethodTable() == g_pStringClass) dwBaseSize -= sizeof(WCHAR); BOOL ret = memcmp( (void *) (pThisRef+1), (void *) (pCompareRef+1), dwBaseSize - sizeof(Object) - sizeof(int)) == 0; FC_GC_POLL_RET(); FC_RETURN_BOOL(ret); } FCIMPLEND