为什么在 Compare 方法的实现中必须包含接口的名称

本文关键字:包含 接口 Compare 方法 实现 为什么 | 更新日期: 2023-09-27 18:36:19

为什么代码:

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 之外,还有什么方法可以缩短它吗?

为什么在 Compare 方法的实现中必须包含接口的名称

如果要隐式实现接口,则必须使该方法公开。此代码应该有效:

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