2

我刚刚注意到例如接口IEqualityComparer<T>提供了public int GetHashCode(T obj).
我经常public int GetHashCode()在另一个接口/类中看到变体。为什么它是用输入参数设计的?我知道在“带参数”的情况下,返回值不会基于调用者对象,而是基于方法的参数。在我看来,它需要的唯一方法是 GetHashCode 的空对象,是吗?
最后一个问题:调用者对象应该是什么(即 GetHashCode 方法的所有者)?

谢谢!


升级版。将最早存在的答案标记为答案。非常感谢!

4

2 回答 2

2

因为IEqualityComparer<T>比较其他对象,而不是自身。因此它需要两个参数Equals(比较其他两个对象)和一个参数GetHashCode(获取其他对象的哈希码)。

于 2013-02-27T17:18:18.580 回答
2

IEqualityComparer这是和之间的区别IEquatable

IComparer您会看到和之间的相同差异IComparable

在这两种情况下,第一种类型是比较其他东西,因此它需要接受其他东西作为参数。第二种类型是将“我自己”与某物进行比较,因此总会少一个参数(本质上是this参数)。

于 2013-02-27T17:19:01.837 回答