considèrent la mise en page de la classe de base suivante:résolution de méthode Comparer
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);
}
}
puis en utilisant ceux comme suit:
List<Base> thingies = new List<Base>
{
new Base(),
new Derived(),
new Derived()
};
thingies.Sort(new BaseComparer());
j'attendais le comparateur être appeler la méthode Derived.CompareTo dans les situations dans lesquelles ses paramètres x et y sont des instances dérivées.
Cependant, ce n'est pas le cas et Base.CompareTo est appelé à la place et je me demande pourquoi. Je ne peux pas sembler déduire ce comportement avec ma compréhension de base des règles de résolution de surcharge comme décrit dans la spécification de langage C#.
Quelqu'un peut-il nous éclairer à ce sujet?
Lire Eric Lipperts messages blog sur la résolution de surcharge - http://blogs.msdn.com/b/ericlippert/archive/tags/overload+resolution/ – Oded