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 :
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"
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 :
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:
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.
Partager