C# 为什么在比较方法的实现中必须包含接口的名称?

C# 为什么在比较方法的实现中必须包含接口的名称?,c#,interface,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; } };

为什么要使用代码:

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;
    }
}
应该很清楚,我是从
IComparer
接口实现这个方法的

我还可以以某种方式缩短此代码:

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


    public static IComparer SortByName() {
        return (IComparer)new SortByName();
    }
私有类SortByName:IComparer{
int比较(人o1,人o2){//错误
返回0;
}
};
公共静态IComparer SortByName(){
return(IComparer)new SortByName();
}

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

如果你想隐式实现接口,你必须公开这个方法。此代码应适用于:

private class SortByName : IComparer<Person>
{
    public int Compare(Person o1, Person o2)
    {
        return 0;
    }
};
私有类SortByName:IComparer
{
公共整数比较(o1人、o2人)
{
返回0;
}
};

你忘了把你的方法公开了吗?如果您这样做了,那么快速删除这个问题可能是个好主意:-)好的,那么从C#端采取某种预防措施来防止意外降低方法可见性吗?简单地说,接口指定类的公共契约。实现接口的所有方法都应该是公共的。
   private class SortByName : IComparer<Person> {
        int Compare(Person o1, Person o2) {//error
            return 0;
        }
    };


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