2010-04-16 2 views
2

C#은 equals 및 gethashcode가있는 Java와 같은 문제가 있습니까?C#은 equals와 gethashcode()가있는 자바와 같은 문제가 있습니까?

문제와 같은 : 당신은 ... 당신이 조금 애매있어 이후에 대해

을 이야기하지만하고 발행하는 http://onjava.com/pub/a/onjava/2006/09/13/dont-let-hibernate-steal-your-identity.html

+6

좀 더 노골적으로 표현하고 싶을 수도 있습니다. 어떤 쟁점이 있습니까? –

+1

문제가 무엇인지에 따라 다릅니다. –

+0

Java의 equals 및 getHashCode의 문제점은 무엇입니까? – Shuo

답변

3

확실하지 당신은 당신이 (당신이 '돈할지이 것을 의미하는 경우 컴파일러 경고 또는 코드에서의 예기치 않은 동작)가 GetHashCode을 재정의 할 때 Equals을 무시한 다음 예.

12

상속을 정의 할 때 동등성을 정의하는 것이 어렵다는 의미라면 그렇습니다.

그러나 .NET에는 Dictionary<TKey, TValue>과 같은 컨테이너의 경우 같음 및 해시에 자주 사용되는 IEqualityComparer<T> 인터페이스가 있습니다. 평등/해싱이 필요한 프레임 워크의 거의 모든 항목은 IEqualityComparer<T>으로 동작을 지정할 수 있으므로 유형 자체에서 제공하는 양식이 사용자의 필요에 부적합한 경우 원하는 평등 개념을 표현할 수 있습니다.

+0

다음과 같은 문제 : http://onjava.com/pub/a/onjava/2006/09/13/dont-let-hibernate-steal-your-identity.html – Blankman

+0

@Blankman : 좋습니다 - 기본적으로 두 가지 개념이 필요합니다. 평등의; 하나는 ID로, 다른 하나는 다양한 분야로 그게 정확히'IEqualityComparer '입니다. –

+0

컬렉션에 IEqualityComparer 이 사용됩니까? 그렇다면 Java보다 약간 강력합니다. – Blankman