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 :

méthode d'extension d'une classe


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 15
    Points : 10
    Points
    10
    Par défaut méthode d'extension d'une classe
    Bonjour, je voudrais savoir si il est possible, quand on définit une méthode d'extension d'une classe, de modifier l'objet sur lequel la méthode sera appellée.
    exemple :
    FAQ de developpez.com : "Comment inverser le contenu d'une chaine à l'aide des méthodes d'extension?
    http://faqcsharp.developpez.com/?pag...ring_reverse_3



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public static void Reverse(this string input)
    {
        char[] inputArray = input.ToCharArray();
        Array.Reverse(inputArray);
        return new string(inputArray); 
    }

    ca ne marche pas, il faut mettre le type de retour string et appeler la méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string s1 = "azerty";
    string s2 = "s1".Reverse();
    est-il possible de définir la méthode pour faire un appel du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string s1 = "azerty";
    s1.Reverse(); // s1 est modifiée et contient ytreza
    merci d'avance,
    Math

  2. #2
    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
    Deux choses:
    1) Les méthodes d'extension ne sont que de la syntaxe. Elle n'ont pas plus de pouvoir que les autres. Appeler s1.Reverse() est strictement équivalent à Bidule.Reverse(s1). Donc comme toute méthode, une méthode d'extension peut modifier un objet, pourvu qu'il ait des méthodes / des propriétés publiques.
    2) Les string sont immutable en C#: on ne peut pas les modifier.
    ಠ_ಠ

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Deux choses:
    1) Les méthodes d'extension ne sont que de la syntaxe. Elle n'ont pas plus de pouvoir que les autres. Appeler s1.Reverse() est strictement équivalent à Bidule.Reverse(s1). Donc comme toute méthode, une méthode d'extension peut modifier un objet, pourvu qu'il ait des méthodes / des propriétés publiques.
    très bonne remarque en effet, on peut modifier les propriétés d'un objet, mais pas l'objet lui même. J'avais testé avec une classe Voiture à laquelle j'ajoutais une extension pour modifier ses propriétés et ca marchait correctement. Je me rends compte qu'effectivement dans une méthode de ma classe ca serait impossible de faire this = new Voiture(..) , et c'est ce que je cherchais plus ou moins à faire avec les chaines de caractères dans la méthode d'extension !

    donc ok, je passe par un param de retour et voila ^^
    merci !!

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Points : 2 331
    Points
    2 331
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public static void Reverse(this string input)
    {
        ....
        return ......
    }


    Sinon +1 pour Guulh

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Arnard Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public static void Reverse(this string input)
    {
        ....
        return ......
    }

    void + return ?
    je comprends pas là ^^
    si tu voulais dire que ca ne peut pas marcher, je suis d'accord ^^ faut changer le code de la FAQ

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

Discussions similaires

  1. Lister les méthodes non référencées d'une classe
    Par legentil dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 22/07/2010, 09h42
  2. paramètre d'une méthode vs propriété d'une classe
    Par kisitomomotene dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 30/07/2009, 15h02
  3. [D7]Méthode non accessible d'une classe à l'autre
    Par ero-sennin dans le forum Delphi
    Réponses: 2
    Dernier message: 20/03/2007, 17h44
  4. Réponses: 4
    Dernier message: 17/03/2007, 01h06
  5. Réponses: 3
    Dernier message: 16/04/2004, 16h51

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