vyros
Messages postés2Date d'inscriptionsamedi 5 décembre 2009StatutMembreDernière intervention 5 juin 2010
-
5 juin 2010 à 15:07
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 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;
}
cs_GG29
Messages postés326Date d'inscriptionvendredi 23 décembre 2005StatutMembreDernière intervention 8 février 201117 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.
vyros
Messages postés2Date d'inscriptionsamedi 5 décembre 2009StatutMembreDerniè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...
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 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é. -