Comment passer une partie de la fonction a appler en parametre ?
smelmel
Messages postés1Date d'inscriptionmercredi 5 septembre 2007StatutMembreDernière intervention11 novembre 2008
-
28 oct. 2008 à 02:57
billou_13
Messages postés860Date d'inscriptionjeudi 4 mars 2004StatutMembreDernière intervention19 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
A voir également:
Comment passer une partie de la fonction a appler en parametre ?
billou_13
Messages postés860Date d'inscriptionjeudi 4 mars 2004StatutMembreDernière intervention19 août 201429 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();