我有一個實現IEquatable <>的類A,使用它的字段(比如Ab和Ac)來實現/覆蓋Equals()並重寫GetHashCode (),並且一切正常,99%的時間。類A是層次結構(類B,C)的一部分,它們都從接口D繼承;它們都可以一起存儲在詞典字典中,因此當它們全部攜帶它們自己的默認Equals()/ GetHashCode()時,它們很方便。如何在覆蓋GetHashCode()的類型上使用Object.GetHashCode()
然而,在構建A I時,有時需要做一些工作來獲得A.b和A.c的值;在發生這種情況時,我想存儲對正在構建的實例的引用。在這種情況下,我不想使用由A提供的默認Equals()/ GetHashCode()覆蓋。因此,我想實現一個ReferenceEqualityComparer,這意味着強制使用Object的Equals()/ GetHashCode() :
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
}
的問題是,由於A重寫Object.GetHashCode(),我怎麼能(A以外)調用Object.GetHashCode()爲A的一個實例?
當然,A的一種方式是不執行IEquatable <>並始終爲我創建的任何字典提供IEqualityComparer <>,但我希望得到不同的答案。
感謝
你自己挖一個漂亮的深洞。用IEqualityComparer <>離開它。 – 2010-01-23 17:13:02