IEqualityComparer 错误

IEqualityComparer error

我正在按照 Nutshell 中的 C# 7.0 教程进行操作,但遇到了一个我无法修复的错误。我理解错误的方式是该方法需要是一个抽象方法,我也尝试过,但没有解决错误。而且我认为抽象 类 允许在其中使用非抽象方法。

代码如下:

public abstract class EqualityComparer<T>: IEqualityComparer, IEqualityComparer<T>
{
    public abstract bool Equals(T x, T y);
    public abstract int GetHashCode(T obj);

    bool IEqualityComparer.Equals(object x, object y);
    int IEqualityComparer.GetHashCode(object obj);

    public static EqualityComparer<T> Default { get; }
}

这里是错误:

'EqualityComparer<T>.IEqualityComparer.Equals(object, object)' must declare a body because it is not marked abstract, extern, or partial

请让我知道我做错了什么。

一个abstractclass可以有abstractmethods/properties和non-abstractmethods/properties。 abstract classes 的子 classes 必须实现基础 class

中标记为 abstract 的所有 methods/properties

abstractmethods/properties不需要在base-class中实现。但是,必须实现未标记 abstract 的基 class 中的任何 methods/properties(即具有代码)。

记住,子classes 不需要实现methods/properties未标记abstract;需要有人来实施它们。

您遇到的错误是第二次 Equals 过载 - 这个:

bool IEqualityComparer.Equals(object x, object y);

您还需要提供正文:

int IEqualityComparer.GetHashCode(object obj);

请注意,它不是 abstract,也没有 implementation/body。它需要看起来像:

int IEqualityComparer.GetHashCode(object obj)
{
    //your code goes here - returning an int
}

你必须实现方法(显式接口实现使方法有效private从而防止它们abstract:你不能声明,比如 abstract bool IEqualityComparer.Equals... ),例如:

bool IEqualityComparer.Equals(object x, object y) {
  if (x is T && y is T)
    return this.Equals((T)x, (T)y); // known types, run Equals
  else
    return object.Equals(x, y);     // unknown type(s), run default Equals 
}

int IEqualityComparer.GetHashCode(object obj) {
  if (obj is T)
    return this.GetHashCode((T)obj);
  else
    return null == obj ? 0 : obj.GetHashCode();
}