这更像是一种学术练习,所以我基本上只是想弄清楚当类型不同时如何使用 IComparable。
假设我们有一个水果类,以及派生类“Apple”和“Orange”。假设我想要一个水果列表,以便在橙子之前拥有所有苹果。解决这个问题的最佳方法是什么?
我认为你可以让 Fruit 实现接口 IComparable 并为非常子类型放入一堆条件语句,但这对我来说似乎很粗糙,可能违反了开放/封闭原则。我更感兴趣的是让它以这种方式工作:
public abstract class Fruit : IComparable<Fruit>
{
public abstract int CompareTo(Fruit other);
}
public class Apple : Fruit, IComparable<Orange>
{
public override int CompareTo(Fruit other)
{
if(other is Orange)
{
this.CompareTo((Orange)other);
}
return 0;
}
public virtual int CompareTo(Orange other)
{
return -1;
}
}
public class Orange : Fruit, IComparable<Apple>
{
public override int CompareTo(Fruit other)
{
if (other is Apple)
{
this.CompareTo((Apple)other);
}
return 0;
}
public virtual int CompareTo(Apple other)
{
return 1;
}
}
我的主要目标是让 IComparable 与交叉类型一起工作。我尝试加载一个包含各种水果的列表,但遗憾的是它没有排序。也许我对 CompareTo 的返回值的理解有点不稳定。这种类型的方法是否有任何希望,是否有任何场景比显而易见的方法更有用?
撒科打诨
动漫人物
当年话下
相关分类