1

GetHashCode当我们覆盖Equals方法时,我知道覆盖的重要性。我假设Equals内部调用GetHashCode.

可能在内部使用的其他方法是GetHashCode什么?

4

2 回答 2

4

Equals不会在内部调用GetHashCode.
GetHashCode许多类将其用作提高性能的一种手段:如果两个实例的哈希码不同,则根据定义Equals,实例不相等,因此可以跳过对的调用。
仅当哈希码相同时才需要调用Equals,因为多个实例可以具有相同的哈希码,即使它们不同。

像这样工作的类的具体示例:

于 2013-08-21T10:55:00.570 回答
4

我假设 Equals 在内部调用 GetHashCode。

这实际上是非常不寻常的。GetHashCode主要由字典和其他基于哈希集的实现使用;所以: Hashtable, Dictionary<,>, HashSet<>, 和一系列其他的东西。基本上,GetHashCode有两个目的:

  • 获取一个松散地表示该值的数字,并且可以用于例如通过模数或任何其他数字分类将一组键分布在一系列桶上
  • 证明不相等(但从不证明相等)

另请参阅:为什么在重写 Equals 方法时重写 GetHashCode 很重要?

于 2013-08-21T10:55:10.433 回答