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

Dotnet Discussion :

Encapsulation de méthodes


Sujet :

Dotnet

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 84
    Par défaut Encapsulation de méthodes
    Bonjour,

    J'ai plusieurs méthodes que je souhaite encapsuler dans une autre.
    Ceci me permettrai d'éviter de dupliquer du code non fonctionnel.

    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
    31
    32
    33
    34
    35
     
    public void MaMethodeAEncapsuler_1(int i)
    {
      // Code avec entrées sorties
    }
     
    public void MaMethodeAEncapsuler_2(string adress)
    {
      // Code avec entrées sorties
    }
     
    public void runWithRetry(method)
    {
       int nbEssai = 3;
       bool isok = false;
     
      While (!isok && nbEssai > 0)
      {
        try
        {
            // Exécuter la méthode "method"   
            isok = true;
        }
        catch
        {
            nbEssai--; 
        }
      }
    }
     
    static void main(string[] args)
    {
       runWithRetry(MaMethodeAEncapsuler_1(1))
       runWithRetry(MaMethodeAEncapsuler_2("blabla"))
    }
    Est il possible de faire cela?
    Merci d'avance.

  2. #2
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    La procedure RunWithRetry doit utiliser 2 delegates ("method") de même type, ce qui n'est pas le cas puisque la première methode a comme paramètre un int et la 2ème une string.

    On peut résoudre ce conflit en utilisant comme paramètre un objet dans les 2 cas et en castant cet objjet sur un int dans la la première methode et sur une string dans la 2ème.

    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
    delegate void MyMethodDelegate(object param);
     
    public void MaMethodeAEncapsuler_1(object param_i) {int i=(int)param_i ; // Code avec entrées sorties }
     
    public void MaMethodeAEncapsuler_2(object param_adress) { string adress=(string)param_adress ; // Code avec entrées sorties }
     
    public void runWithRetry(MyMethodDelegate method,object param)
    {
      int nbEssai = 3; bool isok = false;
      while (!isok && nbEssai > 0) { try { method(param) ; isok = true; } catch { nbEssai--; } }
    }
     
    static void main(string[] args) { runWithRetry(MaMethodeAEncapsuler_1,1) ; runWithRetry(MaMethodeAEncapsuler_2,"blabla) ; }
    

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 84
    Par défaut
    Merci Graffito pour cette réponse.
    Ca fera beaucoup plus propre.

  4. #4
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    j'opterai plutôt pour une seule méthode générique plutôt que deux:


    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 void MaMethodeAEncapsuler<T>(T param) 
            {
                if (param is string)
                {
                    MessageBox.Show("c'est un string");
                }
                else if(param is int)
                {
                    MessageBox.Show("c'est un int");
                }
            }
     
            public void runWithRetry<T>(Action<T> method, T param)
            {
                int nbEssai = 3;
                bool isok = false;
                while (!isok && nbEssai > 0)
                {
                    try
                    {
                        method(param);
                        isok = true;
                    }
                    catch
                    {
                        nbEssai--;
                    }
                }
            }

    Utilisation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    runWithRetry<int>(MaMethodeAEncapsuler, 1);
    runWithRetry<string>(MaMethodeAEncapsuler, ""blabla"");

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/04/2014, 20h09
  2. Gestion d'objet encapsulé et accès aux méthodes.
    Par Ragnarok666 dans le forum Débuter
    Réponses: 7
    Dernier message: 13/03/2009, 14h37
  3. Méthode doublement encapsulée
    Par <Zer0> dans le forum Ruby
    Réponses: 11
    Dernier message: 12/12/2007, 18h04
  4. Réponses: 31
    Dernier message: 30/03/2006, 16h57
  5. Cryptage en C selon la méthode de césat
    Par shenron dans le forum C
    Réponses: 2
    Dernier message: 31/05/2002, 08h22

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