首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IEqualityComparer错误

IEqualityComparer错误
EN

Stack Overflow用户
提问于 2018-08-10 18:55:46
回答 2查看 245关注 0票数 0

简单地说,我正在学习C# 7.0中的一个教程,并得到了一个我无法修复的错误。我理解错误的方式是,这个方法需要是一个抽象的方法,我也尝试过,但是这并没有解决错误。我认为抽象类允许使用非抽象方法。

以下是代码:

代码语言:javascript
复制
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; }
}

以下是错误:

代码语言:javascript
复制
'EqualityComparer<T>.IEqualityComparer.Equals(object, object)' must declare a body because it is not marked abstract, extern, or partial

请告诉我我做错了什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-10 19:12:08

您必须实现这些方法(显式接口实现使方法高效地成为private,从而防止它们成为abstract:您不能声明,比方说,abstract bool IEqualityComparer.Equals... ),例如:

代码语言:javascript
复制
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();
}
票数 0
EN

Stack Overflow用户

发布于 2018-08-10 19:00:33

abstract类可以具有abstract方法/属性和non-abstract方法/属性。abstract类的子类必须实现基类中标记为abstract的所有方法/属性。

abstract方法/属性不需要在基类中实现。但是,基类中没有标记abstract的任何方法/属性都必须实现(即有代码)。

记住,子类不需要实现未标记为abstract的方法/属性;有人需要实现它们。

您所得到的错误是第二个Equals重载--这个重载:

代码语言:javascript
复制
bool IEqualityComparer.Equals(object x, object y);

你还需要提供一个机构,以便:

代码语言:javascript
复制
int IEqualityComparer.GetHashCode(object obj);

请注意,它不是abstract,也没有实现/主体。它需要看起来像:

代码语言:javascript
复制
int IEqualityComparer.GetHashCode(object obj)
{
    //your code goes here - returning an int
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51792567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档