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

VB.NET Discussion :

Appeler une procédure par son nom contenue dans une string


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2022
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2022
    Messages : 76
    Par défaut Appeler une procédure par son nom contenue dans une string
    Bonjour à tous,

    J'ai réalisé plusieurs procédures qui doivent s'exécuter dans un ordre différent selon la priorisation faite à un moment t.
    Cette priorisation change régulièrement en fonction de la valeur de plusieurs paramètres.
    Donc les procédures s'appliquent dans un ordre différent à chaque fois.

    Est-il possible d'appeler une procédure par son nom contenue dans une chaine de caractère ?
    Ca m'aiderait bien...
    Car en fonction de la valeur de certaines variables, telles ou telles procédures s'appliquent ou non et dans un ordre différent.
    Je cherche donc à lier ces variables avec des procédures à appeler quand la variable a la bonne valeur recherchée.

    Merci pour vos aides.
    J'ai regardé du côté de CallByName, mais je ne crois pas, sauf erreur, que cela réponde à mes besoins. Ou je n'ai pas compris comment l'utiliser correctement.

    Merci pour vos aides

  2. #2
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonsoir,

    Si tu peux écrire une procédé dure de lancement de tes procéduires "nommées", elle peut être ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub ExecuteProcedure(NomProcedure As String)
    Select Case NomProcedure
    Case "UneProcedure"
      UneProcedure()
    Case "AutreProcedure"
      AutreProcedure()
    '....
     
    End Select
    End Sub
    Cette méthode implique de connaître les noms des procédures susceptibles d'être appelées.

    Certes un peu simple mais si ça peut te dépanner, pourquoi pas ...

  3. #3
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 251
    Par défaut
    J'ai fais quelque chose de similaire, il y a quelques temps de ça, c'est pas le meilleur code que j'ai produit surement, mais ça marche.

    Par contre, je l'ai fais en C# et j'ai pas de VS disponible sous la main pour te le traduire en VB.

    En fait je suis passé par des taches, j'ai déclaré mes procédures comme des taches,
    Code c# : 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
     
    // Pour mon besoin, mes méthodes étaient des fonctions renvoyant un int, et j'avais besoin de fonctionner en asynchrone
    async public Task<Int32> GetMachin()
    {
    	int result = 0;
    	....
    	return result;
    }
    async public Task<Int32> GetTruc()
    {
    	int result = 0;
    	....
    	return result;
    }
    async public Task<Int32> GetChose()
    {
    	int result = 0;
    	....
    	return result;
    }
    ...
    et je me suis servi d'un dictionnaire :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dictionary<string, Task<Int32>> dic = new Dictionary<string, Task<Int32>>
    {
    	{"Machin", GetMachin()},
    	{"Truc", GetTruc()},
    	{"Chose", GetChose()}
    };

    Et ensuite j'appelle mes méthodes comme ceci
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    string s = "Machin"; // Pour l'exemple, pour utiliser une variable
    ...
    int n = await dic[s];

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Citation Envoyé par sevyc64 Voir le message
    J'ai fais quelque chose de similaire, il y a quelques temps de ça, c'est pas le meilleur code que j'ai produit surement, mais ça marche.

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dictionary<string, Task<Int32>> dic = new Dictionary<string, Task<Int32>>
    {
    	{"Machin", GetMachin()},
    	{"Truc", GetTruc()},
    	{"Chose", GetChose()}
    };

    Et ensuite j'appelle mes méthodes comme ceci
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    string s = "Machin"; // Pour l'exemple, pour utiliser une variable
    ...
    int n = await dic[s];
    Je ne trouve pas cela si mal.
    J'utilise à peu près la même technique mais à base d'enum.
    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
    Operation result;
    var kinds = new Dictionary<TokenGenericKind, Func<Operation>>
    {
        { TokenGenericKind.Date, () => { return DateExpression(); } },
        { TokenGenericKind.Number, () => { return NumberExpression(); } },
        { TokenGenericKind.Text, () => { return StringExpression(); } }
    };
     
    if (kinds.ContainsKey(currentToken.GenericKind))
    {
        result = kinds[currentToken.GenericKind]();
    }
    else
    {
        ....
    }
     
    return result;

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Par défaut
    Citation Envoyé par Krys9292 Voir le message
    J'ai regardé du côté de CallByName, mais je ne crois pas, sauf erreur, que cela réponde à mes besoins. Ou je n'ai pas compris comment l'utiliser correctement.
    Apparemment si, ça devrait faire le job: https://learn.microsoft.com/en-us/do...-a-string-name

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/06/2012, 01h09
  2. Réponses: 8
    Dernier message: 19/07/2010, 15h50
  3. [POO] Appeler une fonction par son nom dans une variable
    Par whitespirit dans le forum Langage
    Réponses: 16
    Dernier message: 18/06/2008, 11h23
  4. Instancier un type avec son nom contenu dans un String
    Par the666deus dans le forum Langage
    Réponses: 7
    Dernier message: 24/05/2007, 14h41
  5. [VB6] Appeler une procedure par son nom.
    Par kenn dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 24/05/2006, 09h29

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