考虑以下基本类布局:
public class Base : IComparable<Base>
{
public int CompareTo(Base other)
{
//Do comparison
}
}
public class Derived : Base, IComparable<Derived>
{
public int CompareTo(Derived other)
{
//Do comparison
}
}
public class BaseComparer : IComparer<Base>
{
public int Compare(Base x, Base y)
{
return x.CompareTo(y);
}
}
然后使用如下:
List<Base> thingies = new List<Base>
{
new Base(),
new Derived(),
new Derived()
};
thingies.Sort(new BaseComparer());
我期望比较器在 x 和 y 参数都是 Derived 实例的情况下调用 Derived.CompareTo 方法。
但是,情况并非如此,而是调用了 Base.CompareTo ,我一直想知道为什么。根据我对 C# 语言规范中描述的重载解决规则的基本理解,我似乎无法推断出这种行为。
有人可以为我解释一下吗?