C# GetHashCode(obj):为什么在某些情况下它';它是用论点设计的?
我刚刚注意到,例如interfaceC# GetHashCode(obj):为什么在某些情况下它';它是用论点设计的?,c#,gethashcode,C#,Gethashcode,我刚刚注意到,例如interfaceIEqualityComparer提供了public int-GetHashCode(T-obj) 我经常在另一个接口/类中看到public int GetHashCode()变量。为什么它是用输入参数设计的?我知道在“with argument”情况下,返回的值不会基于调用方对象,而是基于方法的参数。在我看来,获取null对象的hashcode是唯一需要的方法,是吗 最后一个问题:调用方对象应该是什么(即GetHashCode方法的所有者) 谢谢 UPD。
IEqualityComparer
提供了public int-GetHashCode(T-obj)
我经常在另一个接口/类中看到
public int GetHashCode()
变量。为什么它是用输入参数设计的?我知道在“with argument”情况下,返回的值不会基于调用方对象,而是基于方法的参数。在我看来,获取null对象的hashcode是唯一需要的方法,是吗最后一个问题:调用方对象应该是什么(即GetHashCode方法的所有者) 谢谢
UPD。将最早存在的答案标记为答案。非常感谢 因为
IEqualityComparer
比较的是其他对象,而不是自身。因此,它需要两个参数用于Equals
(比较其他两个对象)和一个参数用于GetHashCode
(获取其他对象的哈希代码)。因为IEqualityComparer
比较其他对象,而不是比较自身。因此,它需要两个参数用于Equals
(比较两个其他对象)和一个参数用于GetHashCode
(获取其他对象的哈希代码)。这是IEqualityComparer
和IEquatable
之间的区别
您可以看到IComparer
和IComparable
之间的相同差异
在这两种情况下,第一种类型都是比较其他内容,因此它需要接受其他内容作为参数。第二种类型是将“我自己”与某物进行比较,因此总是少了一个参数(本质上是
这个参数)。这是IEqualityComparer
和IEquatable
之间的区别
您可以看到IComparer
和IComparable
之间的相同差异
在这两种情况下,第一种类型都是比较其他内容,因此它需要接受其他内容作为参数。第二种类型是将“我自己”与某个东西进行比较,因此总是会少一个参数(本质上是这个参数)。哦,可怜的我,我没有注意到这个观点,即使是以接口的名义存在!谢谢:)哦,可怜的我,我没有注意到这种观点,甚至在界面的名称中也存在!谢谢:)