Extension Method et .Net 2.0, pas si simple que ça !

Par Sébastien Carriere 5. mars 2008 08:25

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 :

clip_image002

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 :

image

Oups, il manque le type "System.Runtime.CompilerServices.ExtensionAttribute" !

Un petit coup de Reflector sur le Framework 3.5 nous donne :

Extension Attribute Reflection

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 :

Soyez le premier à noter ce billet

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

Powered by BlogEngine.NET 1.4.5.0
Theme by Mads Kristensen