2013-02-27 2 views
2

방금 ​​예를 들어 인터페이스 IEqualityComparer<T>public int GetHashCode(T obj)을 제공합니다.
다른 인터페이스/클래스에서 public int GetHashCode() 변종을 자주 보았습니다. 입력 인수가있는 이유는 무엇입니까? 나는 '인수가있는'경우에 반환 된 값이 호출자 객체를 기반으로하지 않지만 메서드의 인수를 기반으로한다는 것을 이해합니다. 필요한 유일한 방법은 null 객체의 GetHashCode를 사용하는 것입니다. 그렇습니까?
그리고 마지막 질문 : 호출자 개체 (즉, GetHashCode 메서드의 소유자)는 무엇이되어야합니까?GetHashCode (obj) : 어떤 경우에는 인수로 설계된 이유는 무엇입니까?

감사합니다.


UPD. 응답으로 바로 존재 한 응답에서 가장 이른 것을 표시했습니다. 고마워요!

답변

2

IEqualityComparer<T>은 다른 개체를 비교하기 때문에 자체가 아닙니다. 따라서 Equals (두 개의 다른 객체 비교)에 대해 두 개의 인수가 필요하고 GetHashCode (다른 객체의 해시 코드 가져 오기)에 하나의 인수가 필요합니다.

+1

오, 가난한 나는 인터페이스의 이름조차도 존재하는이 관점을 알아 채지 못했습니다! 고맙습니다 :) – pkuderov

2

IEqualityComparerIEquatable의 차이점은 무엇입니까?

IComparerIComparable 사이에 같은 차이가 있습니다.

두 경우 모두 첫 번째 유형은 기타 항목을 비교하므로 다른 인수를 인수로 받아 들여야합니다. 두 번째 유형은 "나 자신"과 무언가를 비교하기 때문에 항상 하나의 매개 변수가 덜 있습니다 (사실상 매개 변수 임).