【发布时间】:2010-08-05 08:58:57
【问题描述】:
考虑以下基本类布局:
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());
我希望 Comparer 在 x 和 y 参数都是 Derived 实例的情况下调用 Derived.CompareTo 方法。
但是,情况并非如此,而是调用了 Base.CompareTo,我一直想知道为什么。根据我对 C# 语言规范中描述的重载决议规则的基本理解,我似乎无法推断出这种行为。
有人可以帮我解释一下吗?
【问题讨论】:
-
阅读 Eric Lipperts 关于重载解决方案的博文 - blogs.msdn.com/b/ericlippert/archive/tags/overload+resolution
标签: c# overloading derived