Nombre d'arguments passés à une classe form

vyros Messages postés 2 Date d'inscription samedi 5 décembre 2009 Statut Membre Dernière intervention 5 juin 2010 - 5 juin 2010 à 15:07
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 - 7 juin 2010 à 10:10
Salut à tous, j'ai cherché un moyen de récupérer simplement (je reste persuadé qu'il existe une fonction en dotnet déjà toute faite) le nombre d'objets (arguments) passés en paramètre à une classe form, exemple :

public partial class formGestionCompte : Form
{
public formGestionCompte(Utilisateur p_monUtilisateur)
{
InitializeComponent();
m_monUtilisateur = p_monUtilisateur;
}
public formGestionCompte(Utilisateur p_monUtilisateur, Compte p_monCompte)
{
InitializeComponent();
m_monUtilisateur = p_monUtilisateur;
m_monCompte = p_monCompte;
}

ici il s'agirait de récupérer soit 1 soit 2...

Merci d'avance.

3 réponses

cs_GG29 Messages postés 326 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 8 février 2011 17
5 juin 2010 à 15:19
public partial class formGestionCompte : Form 
{ 
    int _nbParams = 0;
    public formGestionCompte(Utilisateur p_monUtilisateur) 
    { 
        InitializeComponent(); 
        _nbParams = 1;
    } 
    public formGestionCompte(Utilisateur p_monUtilisateur, Compte p_monCompte) 
    { 
        InitializeComponent(); 
        _nbParams = 2;
    }
}



---
mon blog
Généralement le bug se situe entre le clavier et la chaise.
Le temps est une "chose" introuvable dont l'existence ne fait aucun doute.
0
vyros Messages postés 2 Date d'inscription samedi 5 décembre 2009 Statut Membre Dernière intervention 5 juin 2010
5 juin 2010 à 16:45
Merci de ta réponse.

Oui, c'est ce que j'ai fait, mais j'aurais voulu me servir des fonctionnalités du dotnet au maximum de leur possibilité, notamment pour mieux connaitre l'environnement...
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
7 juin 2010 à 10:10
Salut

Une solution, c'est de passer un nombre de paramètres variable :
public formGestionCompte(params object[] args)
{
    // Pour avoir le nombre d'arguments, tu fais juste args.Length
}


Tout d'abord, sache que tu peux mettre autre chose que object (n'importe quelle classe ou structure en fait). Sache également que tu peux mettre des paramètres "normaux" avant "params object[] args".

Attention que cette solution a 2 défauts : le premier, c'est que tu peux l'appeler avec tout objet de type (en l'occurrence) object, c'est à dire TOUT. Tu peux donc lui transmettre de mauvais arguments et/ou un mauvais nombre d'arguments. Le deuxième défaut (beaucoup moins important), c'est que tu devras faire un cast de tes objets après pour pouvoir les utiliser.


Il y a une autre solution : avec le StackTrace et la réflexion, tu dois pouvoir trouver le nombre d'arguments dans ta méthode.
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
int _nbParams = st.GetFrame(0).GetMethod().GetParameters().Length;

En revanche, c'est compliqué (enfin, bien plus que nécessaire), pas performant (réflexion) et ça n'a pas vraiment d'intérêt par rapport à la méthode proposée par GG29 puisque tu ne crées qu'un nombre fini de surcharges de ta méthode.
Remarque également qu'il faut peut-être utiliser GetFrame(1) : la méthode GetFrame() doit déjà être dans la pile d'appel (donc à l'indice 0).

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
0
Rejoignez-nous