C# Language같음 및 GetHashCode

비고

Equals 각 구현은 다음 요구 사항을 충족해야합니다.

  • 반사적 (Reflexive) : 객체는 그 자체로 동일해야합니다.
    x.Equals(x)true 반환 true .

  • 대칭 : x와 y를 비교하거나 x를 y와 비교하면 차이가 없습니다. 결과는 같습니다.
    x.Equals(y)y.Equals(x) 와 같은 값을 반환합니다.

  • 전이 : 한 객체가 다른 객체와 같고이 객체가 세 번째 객체와 같으면 첫 번째 객체는 세 번째 객체와 같아야합니다.
    if (x.Equals(y) && y.Equals(z))true 반환하면 x.Equals(z)true 반환 true .

  • 일관성 : 개체를 다른 개체와 여러 번 비교하면 그 결과는 항상 동일합니다.
    연속적인 x.Equals(y) 호출은 x 및 y에서 참조하는 객체가 수정되지 않는 한 동일한 값을 반환합니다.

  • null로 비교 : 없음 개체가 같은지 null .
    x.Equals(null)false 반환합니다.

GetHashCode 구현 :

  • Equals 와 호환 : 두 객체가 같으면 ( Equals 가 true를 반환한다는 의미), GetHashCode 각각에 대해 동일한 값을 반환 해야 합니다.

  • 넓은 범위 : 두 객체가 같지 않은 경우 ( Equals 은 거짓이라고 함) 해시 코드가 고유 할 확률 이 높아야합니다. 선택할 수있는 값의 수가 제한되어 있으므로 완벽한 해싱이 불가능할 수 있습니다.

  • 염가 : 모든 경우에 해시 코드를 계산하는 것은 저렴해야합니다.

참조 : 오버로드에 대한 지침 Equals () 및 연산자 ==

같음 및 GetHashCode 관련 예