Extension method et surcharge
Le billet de frédéric a donné lieu a une série de commentaires très intéressants et notamment à la question suivante : comment le compilateur choisit-il une extension method.
Après quelques tests, je pense que la réponse est la suivante :
Le compilateur cherche la méthode la plus typée dans le namespace d'appel de l'extension method. Si et seulement s'il n'en trouve pas, il cherche dans les namespaces qu'il a en using.
De ce fait, imaginons le cas suivant :
Dans une assembly 1, le code suivant :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using ClassLibrary1;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
C3 s = new C3();
Console.WriteLine(s.Test());
Console.ReadLine();
}
}
public static class Class1
{
public static string Test(this C1 o)
{
return "C1";
}
}
}
et dans une assembly 2 le code suivant :
namespace ClassLibrary1
{
public class C1
{
}
public class C2 : C1
{
}
public class C3 : C2
{
}
public static class Class1
{
public static string Test(this C3 t)
{
return "C3";
}
}
}
namespace ConsoleApplication3
{
public static class Class1
{
public static string Test(this C2 o)
{
return "C2";
}
}
}
La console affichera : C2.
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :