Метод RuntimeHelpers.GetHashCode(object)
позволяет генерировать хеш-коды на основе идентификатора объекта. MSDN указывает:
The RuntimeHelpers.GetHashCode method always calls the Object.GetHashCode method non-virtually, even if the object's type has overridden the Object.GetHashCode method.
[MethodImpl(MethodImplOptions.InternalCall)]
[SecuritySafeCritical]
public static extern int GetHashCode(object o);
Однако при проверке метода Object.GetHashCode()
с помощью Reflector (.NET 4.0 )мы увидим следующий код:
public virtual int GetHashCode()
{
return RuntimeHelpers.GetHashCode(this);
}
Это заставляет меня поверить, что документация MSDN неверна, поскольку вызов Object.GetHashCode
из RuntimeHelpers.GetHashCode(object)
вызовет переполнение стека.
Итак, каково фактическое поведение RuntimeHelpers.GetHashCode(object)
и как оно работает? Как он вычисляет хэш?