2009-07-01 1 views
2

클래스에는 ID 속성이 있으며이 속성은 SQL 테이블의 기본 키 열에서 값을 가져옵니다. 나는 내 수업에기본 키 기반 GetHashCode() - 안전합니까?

public override int GetHashCode() 
{ 
    return this.ID + GetType().GetHashCode(); 
} 

를 작성하는 경우

그것은 좋은 방법인가? (이 같은 방식으로 이미 오버라이드 같음.) 왜 그냥 익숙하지이기 때문에 무슨 일을하는 것이 좋습니다 경우

public override int GetHashCode() { 
    return this.ID.GetHashCode(); 
} 

나는 확실하지 않다 할 수없는

답변

5

왜 해시 코드에 유형을 포함시키고 싶습니까? 난 당신이 같은 맵에서 같은 ID를 가진 다른 유형의 개체를 많이했다 경우 그 유용 할 수있는 방법을 볼 수 있지만, 일반적으로 그냥 평등의 아이디어를 상속 내 까다로운 될

public override int GetHashCode() 
{ 
    return ID; // If ID is an int 
    // return ID.GetHashCode(); // otherwise 
} 

주를 사용하십시오 계층 구조 - 상속보다 구성을 선호하는 또 다른 이유입니다. 이 점에 대해 실제로 걱정할 필요가 있습니까? 당신이 당신의 클래스를 밀봉 할 경우에만 쓸 필요로 평등 테스트를 쉽게 만들 것입니다 : (. Equals 메서드 당신은 잘 강력한 형식을 할 수 있으며, IEquatable 구현)

public override bool Equals(object obj) 
{ 
    MyType other = obj as other; 
    return other != null && other.ID == ID; 
} 

+0

감사합니다 두 사람 모두 봉인 된 아이디어에 +1합니다. – boj

2

방법 해시 코드는 유형 인스턴스에 지정됩니다. 그리고 해시 코드의 목적은 Int32 형식으로 개체의 일관성 표현을 유지하는 것입니다.