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并重新编译,突然工作了。对不起,耽误你时间了。
我假设从你的错误,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
,因此类甚至不是公共的。