Nombre d'arguments passés à une classe form

Signaler
Messages postés
2
Date d'inscription
samedi 5 décembre 2009
Statut
Membre
Dernière intervention
5 juin 2010
-
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
-
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

Messages postés
326
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
8 février 2011
17
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.
Messages postés
2
Date d'inscription
samedi 5 décembre 2009
Statut
Membre
Dernière intervention
5 juin 2010

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...
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
49
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é. -