개체의 ID를 기반으로 해시 코드를 생성하려면 어떻게해야합니까?.net의 개체 ID를 기반으로 해시 코드 생성
object.ReferenceEquals(a, b) == true
경우, 다음a
및b
가 같은 해시 코드를 얻을 것이다 :는 내 말은 것입니다.
object.ReferenceEquals(a, b) == false
인 경우a
및b
은 동일한 해시 코드라도 다른 해시 코드를 얻을 수있는 적절한 기회가 있어야합니다.
는 내가 가지고있는 것은 :
class SomeClassThatMakesSenseToCompareByReferenceAndByValue {
override Equals(object o) {
return MemberwiseEquals(o);
}
override GetHashCode() {
return MemberwiseGetHashCode();
}
}
class SomeClassThatNeedsReferenceComparison {
SomeClassThatMakesSenseToCompareByReferenceAndByValue obj;
override Equals(object o) {
return o is SomeClassThatNeedsReferenceComparison && object.ReferenceEquals(this.obj, (o as SomeClassThatNeedsReferenceComparison).obj);
}
override GetHashCode() {
return ?????
}
}
이 문제에 대한 사용 사례가 좀 더 자세히 설명되어 있습니다. –
* "[...] 멤버쉽이 같더라도 다른 해시 코드를 얻을 수 있습니다"* - 조금 이상하게 들립니다. 'GetHashCode' 문서 ("Notes to implementers"에서)에서 다음 텍스트를보십시오 : * "두 객체가 같다고 비교하면 각 객체의 GetHashCode 메소드는 같은 값을 반환해야합니다"*. 나는 무언가를 놓칠지도 모른다. –
그래서 내 'SomeClassThatMakesSenseToCompareByReferenceAndByValue' 클래스가 일관된 해시 코드를 반환합니다. 그러나 다른 클래스에서는 정체성에 따라'GetHashCode'와'Equals'을 사용하고 싶습니다. – erikkallen