Метод RuntimeHelpers.GetHashCode(object)
позволяет генерировать хэш-коды на основе идентичности объекта. MSDN состояния:
Метод RuntimeHelpers.GetHashCode всегда вызывает Object.GetHashCode не виртуально, даже если тип объекта имеет переопределил метод Object.GetHashCode.
[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)
и как оно работает? Как он вычисляет хэш?