调用Object.GetHashCode的缺省实现

所有的.NET类都是基于System.Object类的。在Object中定义了返回值为int的虚函数GetHashCode。因为是虚函数,子类可以重写(override)GetHashCode以体现更合逻辑的算法。但是,重写后的GetHashCode可能会产生比较集中占用了Int32的狭窄区间的Hash Code(哈希值),使得更多的不同实例有着相同的值.

 

这样的实现一点也不违背长生Hash code的原则。在极端情形下即使所有的实例的哈希值都是相同的,这也是合法的算法。当然也是很差的算法。

 

Object.GetHashCode的缺省实现则有着很好的哈希值分布。在实践中人们常发现一个实例的Hash Code几乎可以有和这个实例有一一对应的关系。也就是说,这是一个很佳的哈希算法。

 

问题是,当GetHashCode被子类重写后,我们如何能够在需要的情形下调用Object.GetHashCode的缺省实现呢?答案是:

int System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(object o); 这是定义在程序集mscorlib之中的。

原文地址:https://www.cnblogs.com/stone/p/178487.html