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 :

Factoriser 4 méthodes en une


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 52
    Points : 29
    Points
    29
    Par défaut Factoriser 4 méthodes en une
    Bonjour j'aimerais savoir comment faire pour factoriser 4 méthodes.
    Les méthodes sont de cette forme.
    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
     
            /// Sol4
            public String Sol4
            {
                get
                {
                    return this._sol4;
                }
                set
                {
                    if (this._sol4 == value)
                    {
                        return;
                    }
                    this._sol4 = value;
                    this.NotifChang("Sol4");
    Simplement les noms des attributs changent (sol4, sol3, ...) sinon le code est le même, j'ai vu en recherchant un peu l'utilisation de delegate mais je ne comprend pas trop comment l'utiliser.

    merci de votre aide

  2. #2
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Points : 332
    Points
    332
    Par défaut
    En C# 4 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    protected void NotifyPropertyChanged<T>(Expression<Func<T>> property)
            {
                MemberExpression memberExpression = property.Body as MemberExpression;
                OnPropertyChanged(memberExpression.Member.Name);
            }
    Qui s'utilisera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     NotifyPropertyChanged(() => this.Sol4);
    Directement dans ton setter.

    Autrement tu as, en 4.5 une instruction qui te permet de le faire de façon plus élégante.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    En faites là tu crées une méthode unique et tu l'appelles à chaque attribut avec cet attribut en paramètre ?

    quand tu parles d'une manière plus élégante, tu dois parler de delegate ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Si tu travailles avec .Net 4.5 alors tu peux utiliser la méthode expliquée dans le blog ici qui parle de l'attribut CallerMemberAttribute ce qui t'évite de passer par les magic strings.

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut
    si il n'y avait pas cette ligne :
    this.NotifChang("Sol4");

    avec le nom de la variable.
    J'aurai pu te répondre précisément.

    Ta solution visiblement passe par un delegate, et de la reflexion.

    L'utilisation d'un delegate se fait en 3 étapes.

    Imaginons que tu ai cette classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    MaClasse()
    {
     
        public bool FncIsPair(int p)
        {
            return p%2 ==0;
        }
     
        public bool FncIsImpaire(int p)
        {
             return p%2 != 0;
        }
    }
    Tu as donc 2 methode avec la meme signature. Tu peux donc créer un delegate pour les utiliser.

    1) on crée un type de delegate, pour indiquer quel est la signature des methodes à "router"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private delegate bool delege_MethodeRetourneBoolEtPrendInt (int argument); //Meme signature que FncIsPair et FncIsImpair
    delege_MethodeRetourneBoolEtPrendInt est donc un nouveau type dans ta classe.

    2) on instancie le delegate en disant vers quelle methode on veut qu'il pointe :
    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
     
     
     
     
     
     //On est dans MaClasse
     
        delege_MethodeRetourneBoolEtPrendInt pPaire;
        delege_MethodeRetourneBoolEtPrendInt pImpaire;
     
       public MaClasse()
       {
     
            pPaire = new delege_MethodeRetourneBoolEtPrendInt(FncIsPair);
            pImpaire= new delege_MethodeRetourneBoolEtPrendInt(FncIsImpaire);
       }
     
     
    }
    3) il n'y a plus qu'à utiliser nos delegates:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      public bool TestNumerique(bool PairOuImpaire,int num)
    {
        if(pairouimpaire)
              return pPaire(num);
        else
              return pImpaire(num);
    }
    Ce qui est un peu lourd, c'est qu'il faut à chaque fois créer un nouveau type de delegate (l'étape 1), mais le framework propose des types de delegate dejà tout pret, comme System.Windows.Form.MethodInvoker ou System.Action qui servent pour des methodes de type void MaMethode(). et System.Action<> pour des methodes de type void MaMethode(jusqu'à 4 arguments)

    Tu peux aussi utiliser des methodes anonymes pour éviter d'avoir à créer pPaire et pImpaire, mais ça c'est une autre histoire.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut
    Je suis tombé la dessus, je pense que ça t'interressera
    http://blog.soat.fr/2012/02/simplifi...ychanged-en-c/

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    Déjà merci à vous pour votre aide !

    h2s84 comment savoir si je peux utiliser .net 4.5 ?

    car je dois effectuer un refactoring partiel d'un logiciel assez lourd dont je ne connais pas tout de celui ci.


    giova_fr je pense avoir compris globalement la façon d'utiliser les delegate. mais j'ai l'impression que ça va alourdir le code plutôt que l'alléger. Je vais déjà tenter d'utiliser les delegate voir si je réussie à l'utiliser pour mes 4 méthodes.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    giova_fr j'ai testé le delegate mais je dois mal le faire car impossible de compiler j'ai une erreur

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/12/2005, 09h41
  2. Création dynamique de méthode sur une classe ?
    Par elitost dans le forum Général Java
    Réponses: 9
    Dernier message: 18/10/2005, 14h47
  3. Réponses: 2
    Dernier message: 31/08/2005, 16h12
  4. [C#] Acceder à la méthode d'une autre form
    Par dacid dans le forum Windows Forms
    Réponses: 35
    Dernier message: 23/03/2005, 14h49
  5. [TOMCAT] JSP problème d'accès aux méthodes d'une classes
    Par gunnm dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 22/05/2004, 14h02

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