为什么在Compare方法的实现中包含接口名称是强制性的?

时间:2016-02-25 22:54:03

标签: c# interface

为什么代码:

class Person {
    public int Age { get; set; }
    public String Name { get; set; }


    private class SortByName : IComparer<Person> {
        int Compare(Person o1, Person o2) {//error
            return 0;
        }
    };


    public static IComparer SortByName() {
        return (IComparer)new SortByName();
    }

    public override string ToString() {
        return Name + " " + Age;
    }
}

我必须明确写:

int IComparer<Person>.Compare(Person o1, Person o2) 

而不仅仅是:

int Compare(Person o1, Person o2)

我应该很清楚我是从IComparer接口实现方法。

我也能以某种方式缩短这段代码:

   private class SortByName : IComparer<Person> {
        int Compare(Person o1, Person o2) {//error
            return 0;
        }
    };


    public static IComparer SortByName() {
        return (IComparer)new SortByName();
    }

我知道在C#中,匿名类无法实现接口,除了lambda之外还有什么方法可以缩短它?

1 个答案:

答案 0 :(得分:3)

如果要隐式实现接口,则必须将方法设置为public。这段代码应该有效:

private class SortByName : IComparer<Person>
{
    public int Compare(Person o1, Person o2)
    {
        return 0;
    }
};