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

本文关键字:因为 不能 实现 接口 成员 IComparable | 更新日期: 2023-09-27 17:54:28

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

下面的代码是我的艺术家类的一部分,我使用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并重新编译,突然工作了。对不起,耽误你时间了。

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

我假设从你的错误,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);
但是请注意,您的类默认是internal,因此甚至不是公共的。
相关文章: