IComparable:无法实现接口成员,因为它不是公共的

时间:2014-03-27 22:39:25

标签: c# compareto

我已经意识到关于这个主题还有许多其他类似的问题,但是查看答案并调整我的代码与之相关的问题已被证明是不成功的。

下面的代码是我的Artist类的一部分,我使用CompareTo来比较艺术家名称和传入的艺术家名称(obj)..

class Artists : IComparable
{
    private string artistName;
    private string artistMembers;

    public int CompareTo(Object obj)
    {
        Artists otherArtist = (Artists)obj;
        return artistName.CompareTo(otherArtist.ArtistName);
    }


    public Artists(string artist, string members){
        ArtistName = artist;
        Members = members;
    }

    public string ArtistName
    {
        set { artistName = value; }
        get { return artistName; }
    }
    public string Members
    {
        set { artistMembers = value; }
        get { return artistMembers; }
    }

}

我真的想避免将变量公开,这是其他地方提供的解决方案,所以我想知道我需要做些什么来解决这个问题,以及我做错了所以我可以从错误中吸取教训。

提前致谢。

编辑2 关闭VS并重新编译,突然工作。抱歉浪费时间。

1 个答案:

答案 0 :(得分:3)

我假设您的真实代码中的CompareTo public。隐式接口实现必须是公共的。

IComparable

但请注意,默认情况下您的课程为int IComparable.CompareTo(Object obj) // will be private unless explicitly using the interface { Artists otherArtist = (Artists)obj; return artistName.CompareTo(otherArtist.ArtistName); } Artists a1 = new Artists("Beatles", "Paul, Ringo"); Artists a2 = new Artists("U2", "Bono"); // this will fail: //int i = a1.CompareTo(a2); // this will work: int i = ((IComparable)a1).CompareTo(a2); ,因此课程甚至不公开。