Object.GetHashCode 메서드

정의

기본 해시 함수로 작동합니다.

public:
 virtual int GetHashCode();
public virtual int GetHashCode ();
abstract member GetHashCode : unit -> int
override this.GetHashCode : unit -> int
Public Overridable Function GetHashCode () As Integer

반환

현재 개체의 해시 코드입니다.

설명

이 API에 대한 자세한 내용은 Object.GetHashCode에 대한 추가 API 설명을 참조하세요.

상속자 참고

해시 함수는 개체의 값에 해당하는 숫자(해시 코드)를 빠르게 생성하는 데 사용됩니다. 해시 함수는 일반적으로 각 형식과 관련이 있으며 고유성을 위해 instance 필드 중 하나 이상을 입력으로 사용해야 합니다. 해시 코드는 정적 필드 값을 사용하여 계산해서는 안 됩니다.

에서 Object파생된 클래스의 경우 메서드는 GetHashCode 파생 클래스 GetHashCode() 가 같음을 참조 같음으로 정의하는 경우에만 기본 클래스 구현에 위임할 수 있습니다. 참조 형식에 대한 의 GetHashCode() 기본 구현은 메서드에서 반환한 해시 코드와 동일한 해시 코드를 반환 GetHashCode(Object) 합니다. 변경할 수 없는 참조 형식에 대해 재정 GetHashCode() 의할 수 있습니다. 일반적으로 변경 가능한 참조 형식의 경우 다음 경우에만 재정의 GetHashCode() 해야 합니다.

  • 변경할 수 없는 필드에서 해시 코드를 계산할 수 있습니다. 또는

  • 개체가 해시 코드를 사용하는 컬렉션에 포함되어 있는 동안 변경 가능한 개체의 해시 코드가 변경되지 않도록 할 수 있습니다.

그렇지 않으면 변경 가능한 개체가 해시 테이블에서 손실된 것으로 생각할 수 있습니다. 변경 가능한 참조 형식에 대해 재정 GetHashCode() 의하도록 선택하는 경우 설명서에서는 개체가 해시 테이블에 저장되는 동안 형식의 사용자가 개체 값을 수정해서는 안 됨을 분명히 해야 합니다.

값 형식의 경우 리 GetHashCode() 플렉션을 사용하는 기본 해시 코드 구현을 제공합니다. 성능 향상을 위해 재정의하는 것이 좋습니다.

다양한 방법으로 해시 코드를 계산하는 자세한 내용 및 예제는 예제 섹션을 참조하세요.

해시 함수에는 다음 속성이 있어야 합니다.

  • 두 개체를 같음으로 비교하는 경우 각 개체에 GetHashCode() 대한 메서드는 동일한 값을 반환해야 합니다. 그러나 두 개체가 같음으로 비교되지 않으면 두 개체의 GetHashCode() 메서드가 서로 다른 값을 반환할 필요가 없습니다.

  • 개체에 대한 메서드는 GetHashCode() 개체의 System.Object.Equals 메서드의 반환 값을 결정하는 개체 상태를 수정하지 않는 한 동일한 해시 코드를 일관되게 반환해야 합니다. 이 애플리케이션의 현재 실행에 대해서만 true 및 애플리케이션을 다시 실행 되 면 다른 해시 코드를 반환할 수는 note 합니다.

  • 최상의 성능을 위해 해시 함수는 많은 클러스터형 입력을 포함하여 모든 입력에 대해 균등 분포를 생성해야 합니다. 개체 상태를 약간 수정하면 최상의 해시 테이블 성능을 위해 결과 해시 코드를 크게 수정해야 한다는 의미입니다.

  • 해시 함수는 컴퓨팅에 저렴해야 합니다.

  • 메서드는 GetHashCode() 예외를 throw해서는 안 됩니다.

예를 들어 클래스에서 제공하는 String 메서드의 GetHashCode() 구현은 동일한 문자열 값에 대해 동일한 해시 코드를 반환합니다. 따라서 두 String 개체는 동일한 문자열 값을 나타내는 경우 동일한 해시 코드를 반환합니다. 또한 메서드는 입력이 특정 범위에서 클러스터된 경우에도 문자열의 모든 문자를 사용하여 임의로 분산된 출력을 생성합니다(예: 문자열에 65,535개의 유니코드 문자를 포함할 수 있더라도 많은 사용자가 하위 128개의 ASCII 문자만 포함하는 문자열을 가질 수 있음).

클래스에 좋은 해시 함수를 제공하면 해당 개체를 해시 테이블에 추가하는 성능에 크게 영향을 줄 수 있습니다. 해시 함수의 적절한 구현을 제공하는 키가 있는 해시 테이블에서 요소를 검색하는 데 일정한 시간(예: O(1) 작업)이 필요합니다. 해시 함수의 구현이 좋지 않은 해시 테이블에서 검색 성능은 해시 테이블의 항목 수(예: O(n) 작업, 해시 n 테이블의 항목 수)에 따라 달라집니다. 악의적인 사용자는 다음 조건에서 해시 테이블에 종속 된 애플리케이션의 성능을 상당히 저하 될 수 있습니다. 있는 충돌 수가 증가 하는 데이터를 입력할 수 있습니다.:

  • 해시 함수가 자주 충돌하는 경우

  • 해시 테이블의 개체 비율이 크면 서로 같거나 거의 같은 해시 코드가 생성됩니다.

  • 사용자가 해시 코드가 계산되는 데이터를 입력할 때

같음으로 간주되는 두 개체가 GetHashCode() 동일한 해시 코드를 갖도록 재정의하는 파생 클래스도 재정 Equals(Object) 의해야 합니다. 그렇지 않으면 형식이 Hashtable 제대로 작동하지 않을 수 있습니다.

적용 대상

추가 정보