У меня есть класс A, который реализует IEquatable <>, используя его поля (скажем, A.b и A.c) для реализации / переопределения Equals () и переопределения GetHashCode (), и все работает отлично, 99% времени. Класс A является частью иерархии (класс B, C), которая все наследуется от интерфейса D; все они могут храниться вместе в словаре Dictionary, поэтому удобно, когда все они несут свои собственные Equals () / GetHashCode () по умолчанию.
Однако, при построении A мне иногда нужно проделать определенную работу, чтобы получить значения для A.b и A.c; пока это происходит, я хочу сохранить ссылку на экземпляр, который создается. В этом случае я не хочу использовать переопределения Equals () / GetHashCode () по умолчанию, предоставляемые A. Таким образом, я думал о реализации ReferenceEqualityComparer, который предназначен для принудительного использования объекта 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?
Одним из способов, конечно, было бы, чтобы А не реализовал IEquatable <> и всегда предоставлял IEqualityComparer <> для любого словаря, который я создаю, но я надеюсь на другой ответ.
Спасибо