IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C# 3.0]Erreur lors de la compilation d'une méthode d'extension


Sujet :

C#

  1. #1
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut [C# 3.0]Erreur lors de la compilation d'une méthode d'extension
    Salut,
    j'ai un soucis d'utilisation du framework 3.0 sous VS 2005.

    Le runtime 3.0 est, à prioris, bien installé, les extensions de projet aussi et compile sans pb, en revanche un code utilisant une méthode d'extension ne compile pas. J'obtiens l'erreur CS1031 type attendu.

    Une idée pour résoudre ce pb ?

    Merci.



    Détail de l'installation :
    Xp sp2

    Microsoft Visual Studio 2005
    Version 8.0.50727.762 (SP.050727-7600)

    Microsoft .NET Framework
    Version 2.0.50727 SP1
    Édition installée : Professional

    Microsoft Visual Basic 2005 xxx

    Microsoft Visual C# 2005 xxx

    Microsoft Visual Web Developer 2005 xxx

    Microsoft Web Application Projects 2005 xxx
    Version 8.0.50727.762

    Crystal Reports xxx

    Extensions for Windows WF
    Windows Workflow Foundation Tools for Visual Studio
    Microsoft Visual Studio 2005 Professional - Français Service Pack 1 (KB926607)

    Orcas Technology Preview - .NET Framework 3.0 Development Tools 1.0
    Microsoft Visual Studio Code Name Orcas Community Technology Preview - Development Tools for WinFX

    Security Update pour Microsoft Visual Studio 2005 Professional - Français (KB937061)

    SQL Server Analysis Services
    Concepteur Microsoft SQL Server Analysis Services
    Version 9.00.3042.00

    SQL Server Integration Services
    Concepteur Microsoft SQL Server Integration Services
    Version 9.00.1399.00

    SQL Server Reporting Services
    Concepteurs Microsoft SQL Server Reporting Services
    Version 9.00.1399.00

  2. #2
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par Laurent Dardenne Voir le message
    en revanche un code utilisant une méthode d'extension ne compile pas.
    Pourrai tu poster le code en question s'il te plait, qu'on puisse y voir plus clair ?

  3. #3
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    namespace ConsoleApplication1
    {
        public class Personne
        {
            public string Nom;
            public string Prenom;
            public int Age;
        }
     
        public static class PersonneExtension
        {
            public static string PrenomNom(this Personne p)
            {
                StringBuilder s = new StringBuilder(p.Prenom);
                s.Append(" ");
                s.Append(p.Nom.ToUpper());
                return s.ToString();
            }
        }
     
        class Program
        {
            static void Main(string[] args)
            {
            }
        }
    }
    Le mot clè this n'est pas reconnu.

  4. #4
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Ce serai pas plus ça ? :
    Edit: A peut être pas en fait
    Sinon tu es sur que pour sa compilation VS utilise bien la version 3.0 du Framework ? ( tu arrives à utiliser tout le reste du C# 3.0 genre Linq et compagnie ? )

  5. #5
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Merci mais ça ne change rien avec mon installation.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    Les méthodes d'extensions font partie de C# 3.0 et pas du framework 3.0.

    Il faut donc Visual Studio 2008 et le framework 3.5 pour les utiliser à mon avis.

  7. #7
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par Kaidan Voir le message
    Les méthodes d'extensions font partie de C# 3.0 et pas du framework 3.0.

    Il faut donc Visual Studio 2008 et le framework 3.5 pour les utiliser à mon avis.
    J'y ai pensé justement mais quand j'ai vu :
    Orcas Technology Preview - .NET Framework 3.0 Development Tools 1.0
    j'ai tout d'un coup douté, mais je pense qu'en effet il faille VS 2008 pour avoir toutes les fonctionnalités du C# 3.0 ...

  8. #8
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par Kaidan Voir le message
    Il faut donc Visual Studio 2008 et le framework 3.5 pour les utiliser à mon avis.
    Je confirme

  9. #9
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Kaidan
    Les méthodes d'extensions font partie de C# 3.0 et pas du framework 3.0.
    J'avais cru comprendre que les versions du C# suivait celle du framework. Effectivement, après ces installations, je n'ai pas trouvé de nouvelle version de compilateur C#.
    Citation Envoyé par Thomas Lebrun Voir le message
    Je confirme
    Pourtant dans ton tutoriel sur C# et Linq, il était question de "
    "Microsoft Visual Studio Code Name “Orcas” Language-Integrated Query, May 2006 Community Technology Preview".
    Je l'ai téléchargé mais elle semble attendre une version pour VS express...
    Ai-je encore loupé une marche ?

  10. #10
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 317
    Points
    13 317
    Par défaut
    Quelqu'un peut il me dire en quoi consiste ces "méthodes d'extension" ?

  11. #11
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Elles permettent d'ajouter de nouvelles méthodes à une classe existante dont on ne dipose pas des sources.

  12. #12
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Quelqu'un peut il me dire en quoi consiste ces "méthodes d'extension" ?
    Du sucre syntaxique bien utile entre autres pour Linq :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    static class Utils
    {
        static string GetNomComplet(this Personne p) { return p.Prenom + " " + p.Nom; }
    }
    void Machin()
    {
    Personne p = ...;
    p.GetNomComplet(); // équivalent à Utils.GetNomComplet(p);
    }

  13. #13
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 317
    Points
    13 317
    Par défaut
    Muchas gracias !

    La semaine prochaine faut que je trouve le temps d'installer 2008 pour voir (je n'ai pas installé la beta, les beta étant souvent trop chronophages).

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    Ca sert à appeler des methodes statics mais sous une forme de methode d'instance. Concretement, c'est de la deco, et le but est de t'eviter le passage d'un parametre (ce qui n'enleve pas le fait que ce soit plutot pratique). Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
        static class Program
        {
            static void Main()
            {
                string[] array = new string[] { "titi", "toto", "tata" };
                string t1 =  array.GimmeFirst();
                string t2 = IEnumerableExt.GimmeFirst<string>(array);
            }
        }
     
        public static class IEnumerableExt
        {
            public static T GimmeFirst<T>(this IEnumerable<T> enu)
            {
                IEnumerator<T> enumerator= enu.GetEnumerator();
                if (enumerator.MoveNext())
                    return enumerator.Current;
                return default(T);
            }
        }
    Ici, t1 == t2, l'appel differe mais l'IL generé est celui d'une methode static.
    Bref, c'est une methode static, que tu vas pouvoir appelé comme une methode d'instance de l'objet (le this te permet de filtrer les instances d'objet candidates).

    edit : grillé !

  15. #15
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Vous avez dit que c'est utile pour ajouter des méthodes à une classe dont on n'a pas les sources. Donc en gros rajouter des methodes à une DLL par exemple.

    Mais est ce plus intéressant que de recréer un objet qui encapsulerais un des objets de la librairie et proposerais des méthodes supplémentaires ?

  16. #16
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par Laurent Dardenne Voir le message
    Pourtant dans ton tutoriel sur C# et Linq, il était question de "
    "Microsoft Visual Studio Code Name “Orcas” Language-Integrated Query, May 2006 Community Technology Preview".
    Je l'ai téléchargé mais elle semble attendre une version pour VS express...
    Ai-je encore loupé une marche ?
    Oui, mais ce tutoriel a été fait avec un vieille version de LINQ/C# 3 que l'on pouvait installer sur VS 2005. Seulement il s'agissait d'une CTP et toute les fonctionnalités n'étaient pas (ou mal) implémentées...

    C# 3 / LINQ fait bien partit du FX .NET 3.5

  17. #17
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Merci à vous.
    Citation Envoyé par Thomas Lebrun
    C# 3 / LINQ fait bien partit du FX .NET 3.5
    Il ne me reste plus qu'une chose à faire je crois.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Dev-Pascal] Erreur lors de la compilation d'une unité
    Par kaligoer dans le forum Autres IDE
    Réponses: 1
    Dernier message: 15/04/2014, 11h22
  2. Erreur lors de la Compilation d'une Application Smart GWT
    Par mido_bc dans le forum GWT et Vaadin
    Réponses: 2
    Dernier message: 24/11/2011, 16h23
  3. [Débutant] Erreur lors de l'appelle d'une méthode
    Par Hekinox dans le forum C#
    Réponses: 3
    Dernier message: 12/10/2011, 08h45
  4. Erreur lors de l'appel d'une méthode Zend Helper
    Par donbrico dans le forum Zend Framework
    Réponses: 4
    Dernier message: 16/04/2008, 15h52
  5. [forward] Erreur lors de l'appel d'une méthode
    Par GLDavid dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 03/07/2007, 17h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo