我已经意识到关于这个主题还有许多其他类似的问题,但是查看答案并调整我的代码与之相关的问题已被证明是不成功的。
下面的代码是我的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并重新编译,突然工作。抱歉浪费时间。
答案 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);
,因此课程甚至不公开。