Equals()를 구현/재정의하고 GetHashCode를 재정의하기 위해 해당 필드 (예 : Ab 및 Ac)를 사용하여 IEquatable <>을 구현하는 클래스 A가 있습니다.(), 모든 것이 잘 작동하는데, 99 %의 시간입니다. 클래스 A는 인터페이스 D에서 상속받은 계층 구조 (클래스 B, C)의 일부입니다. 그들은 모두 사전 사전에 함께 저장할 수 있습니다. 따라서 모든 기본 고유 Equals()/GetHashCode()를 수행 할 때 편리합니다.GetHashCode()를 오버라이드하는 형식에 Object.GetHashCode()를 사용하는 방법
그러나 A를 구성하는 동안 A.b 및 A.c에 대한 값을 얻기 위해 언젠가는 작업해야합니다. 그 일이 발생하는 동안, 나는 지어지고있는 인스턴스에 대한 참조를 저장하고 싶다. 이 경우에는 A가 제공하는 기본 Equals()/GetHashCode() 재정의를 사용하고 싶지 않습니다. 따라서 ReferenceEqualityComparer를 구현하려고합니다. 이는 Object의 Equals()/GetHashCode() : A는 Object.GetHashCode()를 오버라이드 (override) 이후
private class ReferenceEqualityComparer<T> : IEqualityComparer<T>
{
#region IEqualityComparer<T> Members
public bool Equals(T x, T y)
{
return System.Object.ReferenceEquals(x, y);
}
public int GetHashCode(T obj)
{
// what goes here? I want to do something like System.Object.GetHashCode(obj);
}
#endregion
}
문제는 I (A 외부)는의 인스턴스에 대한 Object.GetHashCode()를 호출 할 수있는 방법이다?
한 가지 방법은 A가 IEquatable <>을 구현하지 않고 내가 만든 임의의 사전에 항상 IEqualityComparer <>을 제공하는 것이지만 다른 대답을 기대하고 있습니다.
감사
:
전체 자세한 내용은이 질문에 대한 답과ObjectReferenceEqualityComparer<T>
의 구현을 참조하십시오. IEqualityComparer <>를 사용하여 빠져 나오십시오. –