A plusieurs reprises, j’ai entendu dire :
« Les méthodes d’extension fonctionnent avec le .Net 2.0, car il s’agit uniquement d’une astuce du compilateur »
Là où je suis d’accord, c’est que le code généré par la compilation de méthodes d’extension peut être exécuté sur .Net 2.0.
Mais qu’en est-il vraiment si je veux faire un projet .Net 2.0 ?
Il faut utiliser Visual Studio 2008 pour avoir le "multi targeting" et le compilateur .Net 3.5.
Mais, l’utilisation des « extension method » n’est pas si simple.
La preuve par l’exemple :
Je crée une application console qui cible le Framework 2.0 :

J'implémente la méthode suivante :
public static class ExtensionMethodClass
{
public static string UpperMethodTest(this string value)
{
return value.ToUpper();
}
}
Je l'appel depuis mon programme :
class Program
{
static void Main(string[] args)
{
string test = "Test String!!";
string result = test.UpperMethodTest();
}
}
Si je compile, j'obtiens l'erreur suivante :

Oups, il manque le type "System.Runtime.CompilerServices.ExtensionAttribute" !
Un petit coup de Reflector sur le Framework 3.5 nous donne :

Pour faire compiler l'application, je vais ajouter me propre classe d'attribut :
namespace System.Runtime.CompilerServices
{
[AttributeUsage(
AttributeTargets.Method |
AttributeTargets.Class |
AttributeTargets.Assembly)]
public sealed class ExtensionAttribute : Attribute
{
}
}
Vous remarquerez que j'utilise le bon namespace.
Maintenant, le code compile et fonctionne correctement !
Source :