2013-02-27 82 views
2

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

谢谢!


UPD。最早从正确的答案标记为答案。非常感谢!

回答

2

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

+1

哦,可怜的我,我没有注意到这个观点,即使以接口的名义存在!谢谢 :) – pkuderov 2013-02-27 18:26:19

2

这是IEqualityComparerIEquatable之间的差异。

您看到IComparerIComparable之间的差异相同。

在这两种情况下,第一种类型是比较别的东西,所以它需要接受别的东西作为参数。第二种类型是将“我自己”与某种东西进行比较,因此总会有一个参数(实际上参数为this)。

相关问题