Récuperer les valeurs de variables qui appartiennent à une autre fonction.

newbie12 Messages postés 4 Date d'inscription dimanche 15 janvier 2012 Statut Membre Dernière intervention 23 juin 2012 - 23 juin 2012 à 06:14
cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 - 26 juin 2012 à 09:00
Bonjour !
Je m'initie au développement en C#. Voici une bref topo de mon problème :
-J'ai une fonction avec 2 variables déclarées (aSucces et bEchec). Durant l’exécution de cette fonction les valeurs des 2 variables vont être incrémentées.
-J'ai une autre fonction, dont la charge serait de récupérer les valeurs des variables situées dans la première fonction, pour ensuite actualiser le contenu d'un label (avec WPF).

Donc, ma question est comment récupérer les valeurs des variables d'une fonction, et les stockées dans une autre fonction. J'ai chercher un peu sur google, et je suis tombé sur le fait qu'on peut déclarer les variables avec static, genre => private static int aSucces ou private static int bEchec. Je demande votre aide !

Merci pour tout.

6 réponses

Whismeril Messages postés 19020 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 15 avril 2024 656
23 juin 2012 à 10:09
Bonjour, l'utilisation de variable static est déconseillée en C#.

si tu utilises des variables d'un type de base (tout sauf les classes que tu écrits toi même: int, double, string etc....), les informations sont passée par valeur, donc tu ne peux pas récupérer les changements effectués sur ces variables.
Il y a deux solutions pour y remédier les mots clés ref et out

exemple fonction
private int somme(ref int a, out int b)
        {
            a += 2;//ajoute 2
            b = 1;//initilise à 1
            return a + b;// retourne la somme
        }

exemple d'appel de la fonction
            int a = 2;
            int b;

            int c = somme(ref a, out b);
            // a et b modifiés accessibles


dans cet exemple, a passe à 4, b est initialisé, la somme est retournée et les valeur modifiées sont accessibles dans ta méthode d'appel.


Si tu utilise une classe personnelle, elle est systématiquement passée par référence, dans ce cas les modifications sont accessibles:

    public class ASommer//class avec valeurs à sommer
    {
        public int a { get; set; }
        public int b { get; set; }
    }



        private int somme(ASommer toto)//fonction pour sommer
        {
            toto.a += 2;//ajoute 2
            toto.b -= 1;//retire 1
            return toto.a+toto.b;
        }


                        ASommer toto new ASommer{a 2, b = 1};
            c = somme(toto);//appel de la fonction somme
            //modification sur toto accessibles


Whismeril
0
newbie12 Messages postés 4 Date d'inscription dimanche 15 janvier 2012 Statut Membre Dernière intervention 23 juin 2012
23 juin 2012 à 20:20
En fait, je m'explique plus simplement ( je code une interface en WPF) :

............................................................
............................................................
............................................................
public MainWindow()
{
InitializeComponent();

DispatcherTimer t1 = new DispatcherTimer();
t1.Tick += new EventHandler(//La est le premier problème);
t1.Interval = new TimeSpan(0,0,1);
t1.Start();
}

private void start_Click(object sender, RoutedEventArgs e)
{
int a = 0;
int b = 0;
for(a<2000)
{
b++;
a++;
}
}

private void Variables(Object sender, EventArgs e)
{
//Vu que la fonction qui gère le clique est du style <RoutedEvent>, je ne peut pas //utiliser de dispatcher timer pour actualiser le contenu d'un label. Donc je suis //obligé de récupérer les valeurs des variables avec la fonction <Variables>,qui est //du style <Event>j, pour y appliquer un dispatcherTimer et ainsi actualisé le //contenu d'un variable.
}


J'espère avoir bien expliqué mon problème.
0
Whismeril Messages postés 19020 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 15 avril 2024 656
23 juin 2012 à 20:37
Je ne fais pas de WWF, donc je n'ai pas tout compris.

Si tout ce code est écrit dans un seul jeux d'accolades alors tu peux déclarer a et b pour tout le jeux. Sinon tu dois pouvoir les passer en paramètre dans un événement personnalisé.

Enfin si ça ne te convient pas, il reste les variable static. De tête, tu écris une classe static Toto dans laquelle tu écrit deux propriétés static a et b.


Whismeril
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
24 juin 2012 à 10:34
Salut,

comme whismeril je ne suis pas sûr de comprendre la demande.

* si tu souhaites afficher une valeur incrémentée sur le Tick d'un Timer, alors il suffit de remplir ta TextBox dans l'évènement associé. Ces variables n'ont pas besoin d'être static, juste d'être membres de la classe (et non locales à la fonction), puisqu'à priori cette classe ne sera instanciée qu'une fois.

* si tu souhaites "espionner" l'incrémentation de tes variables à l'intérieur d'une boucle for, alors il va falloir la mettre dans un thread, sinon la boucle ira jusqu'au bout avant de rendre la main au reste du programme. Toujours pas d'utilité à des variables static si tu n'as qu'une instanciation, des variables membres à la classe suffisent.

PS : je connais WPF non plus.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
24 juin 2012 à 10:36
*je ne connais pas WPF non plus
0
cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
26 juin 2012 à 09:00
Bonjour,
Qu'est ce que tu veux afficher a et b qui je suppose sont aSucces et bEchec de ta première question?
et l'incrémentation doit se faire à chaque du timer ou bien juste mettre à jour les labels de a et b avec leurs valeurs courantes?
Il faudrait aussi voir le fichier xaml pour voir comment tu as fait le databinding.

louis
0
Rejoignez-nous