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 & Reflexion] reconnaitre une méthode d'extension


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    maa
    maa est déconnecté
    Membre éclairé
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Par défaut [C# 3.0 & Reflexion] reconnaitre une méthode d'extension
    Bonjour,

    Je cherche, par reflexion, à savoir si une méthode est une méthode d'extension. Savez-vous si cela est possible ?

    merci.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    qu'entends tu par méthode d'extension ?.

    méthode de surcharge (override) ? ou methode de masquage (new) ?
    ou j'ai rien compris ?

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Salut,

    je crois avoir compris que les methodes d'extension ne sont que des jeux d'ecritures, le code derriere restant identique à une methode statique. Donc, je ne vois pas trop comment tu pourrais trouver ca, a part en comparant la methode que tu supposes d'extensions et la liste des methodes du type par reflection.

    @ Cinemania :

    Les methodes d'extension sont une nouveautés de C# 3 (dont Linq se sert à foison), 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
        public class MaClasse
        {
            public string S { get; set; }
     
            public void SetAndDisplay(string s)
            {
                Console.WriteLine(s);
                S = s;
            }
     
            public static void Main()
            {
                MaClasse cl = new MaClasse();
                cl.SetAndDisplay("Salut");
                //Remplacé par ClassStatic.MaMethodStatic(mC, "Salut")
                cl.MaMethodStatic("Salut");
            }
        }
     
        public static class ClassStatic
        {
            //Ici le premier argument est marqué this de type MaClasse, donc cette
           methode etendra les instances de type MaClasse
            public static  void MaMethodStatic(this MaClasse mC, string s)
            {
                Console.WriteLine(s);
                mC.S = s;
            }
        }

  4. #4
    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 : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Attends la, tu veux dire qu'en c# 3.0 tu peut regrouper toutes les classes static de tes objets dans une seule et unique classe statique et tu entendras ces méthodes pour les associés à la bonne classe ?

    Je ne sais ce qui est le plus propre, que chaque classe gère ses méthodes static ou qu'une classe gère toutes les méthodes static ?

    Et comment cela marche d'un point de vue portée de la classe ?

  5. #5
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Un avantage est de pouvoir étendre des classes dont tu n'as pas les sources.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  6. #6
    maa
    maa est déconnecté
    Membre éclairé
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Par défaut
    je crois avoir compris que les methodes d'extension ne sont que des jeux d'ecritures, le code derriere restant identique à une methode statique. Donc, je ne vois pas trop comment tu pourrais trouver ca
    C'est ce que je me disais aussi. Mais Visual Studio arrive avec l'intellisens à reconnaître les méthodes d'extensions. Or il me semble que l'intellisens fonctionne avec la réflexion... D'où mon questionnement.

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Citation Envoyé par ced600
    Et comment cela marche d'un point de vue portée de la classe ?
    Salut,

    si tu parles de la portée de la methode d'extension, elle viendra etendre tous les elements du type du premier argument de la methode static, si tu es dans le bon namespace. Par exemple, si tu es sur Orcas, ajoute le namespace System.Linq, tu verras les methodes d'extensions d'IEnumerable<T>.

    si tu parles de la portée de la classe cible, aucun probleme la dessus, vu que tu as l'accès (dans l'extension) qu'aurait une methode static normale.

    Bref c'est pas forcement la revolution de C#3 mais c'est quand meme bien pratique (les Max<T>(), Min<T>() ou encore ToDictionnary<T, U>(Func<T, U> keySelector) de IEnumerable<T> on ne n'en passe plus ). Pour le regroupement de classe statics dans une seul classe, oui c'est possible, apres savoir si c'est adapté, ce n'est pas parceque cela existe qu'il faut forcement l'utiliser. =p

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/02/2015, 19h25
  2. Invoquer une méthode par reflexion en utilsant un plugin
    Par tounsi.ichraf dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 31/03/2014, 11h39
  3. Comment créer une méthode d'extension sur un type
    Par Passepoil dans le forum VB.NET
    Réponses: 8
    Dernier message: 02/10/2012, 08h07
  4. [Reflexion] Récupération d'une méthode déclarée dans la classe supérieure
    Par masterboy01 dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 14/12/2011, 19h28
  5. Réponses: 16
    Dernier message: 07/12/2007, 12h11

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