Comment passer une partie de la fonction a appler en parametre ?

smelmel Messages postés 1 Date d'inscription mercredi 5 septembre 2007 Statut Membre Dernière intervention 11 novembre 2008 - 28 oct. 2008 à 02:57
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 - 28 oct. 2008 à 09:39
Bonjour,

Je sais que ce que je veux faire et faisable, j'avais lu ça quelque part, mais je n'arrive pas à me rappeler ou.
Bref ce que je veux faire c'est appeler une fonction en passant une partie de son nom en parametre

disons que si j'avais qu'une seule fonction je l'appelerais comme ça:
validation.ValiderPersonne();

j'ai plusieurs validations que je voudrais appeler en se basant sur le nom du bouton sue lequel j'appuie

exemple : string x = button1.text;
puis appler ma fonction quelque chose comme : validation.'x'();    ou      validation.Valider'x'();

c'est cette syntaxe là que je cherche

Merci d'avance
Anass

1 réponse

billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
28 oct. 2008 à 09:39
Bonjour,

Pour ce faire, il te faut utiliser la 'reflection' (using System.Reflection).
Ainsi, tu pourras appeler une méthode avec son nom (string).

Exemple:
Class1 c = new Class1();//Mon objet ou validation pour toi
object ret = typeof(Class1).InvokeMember("Test", BindingFlags.InvokeMethod, null, c, null);//Appel de la méthode Test(), le dernier paramètre (à null ici) permet de spécifier les paramètres de la méthode.


Cependant, pour ton problème, je t'aurais bien proposé de faire plutôt comme ceci:

Création d'une interface qui contient une méthode 'bool Validate()' : ex: IValidation
Ensuite, tu implémentes toutes les classes qui contiennent une validation et 'héritant' de cette interface.

Ainsi, tu pourras appeler chaque classe comme ceci:
IValidation valid = (IValidation) Activator.CreateInstance(Type.GetType('namespace.nom_de_ta_classe'));
bool result = valid.Validate();


A voir,

Bonne journée,


Billou_13
0
Rejoignez-nous