为什么IComparer要求您定义IComparer.Compare(Object x,Object y)而不仅仅是Compare(Object x,Object y)?

时间:2016-10-27 09:55:35

标签: c# sorting interface icomparer

我对C#相当陌生(6个月的工作经验),但它似乎与Java非常相似,所以我觉得在家里。

然而,今天我尝试实现IComparer接口,并想知道它为什么给我一个错误:

public class AlphabeticalReportSort : IComparer
{
    int Compare(Object x, Object y)
    {
        return 0;
    }
}

似乎需要您将其实现为:

public class AlphabeticalReportSort : IComparer
{
    int IComparer.Compare(Object x, Object y)
    {
        return 0;
    }
}

我没有注意到界面声明中需要这样做的任何内容,而且在C#中似乎通常不需要这样做。

有人知道为什么吗?

1 个答案:

答案 0 :(得分:9)

  

为什么IComparer要求您定义IComparer.Compare(Object x,Object y)而不仅仅是Compare(Object x,Object y)?

没有。完整的错误消息是:

  

'AlphabeticalReportSort'没有实现接口成员'IComparer.Compare(object,object)'。 'AlphabeticalReportSort.Compare(object,object)'无法实现接口成员,因为它不是公共的。

注意第二句话。您的int Compare()方法是私有的,不是公共的,因此不能作为接口方法的实现。

int IComparer.Compare()是一个显式实现,它编译是因为显式接口实现总是公共的(因为所有接口成员都是公共的),因此不需要访问修饰符。但在您的情况下,只需将您的方法标记为公共就足够了。很少需要明确地实现接口方法,据我所知,在接口定义本身中实际上并不需要这样做。