2 question de débutant !!

Résolu
jfleking Messages postés 7 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 28 juillet 2009 - 16 juil. 2009 à 07:20
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 - 17 juil. 2009 à 09:57
Bonjour, je commence dans le domaine du C#. Avant cela j'avais quelque petite bases en actionscript.

Ma première question est-il possible d'avoir des variables globale dans ce langage ? Sans a avoir a faire trop de manip compliquer pour mon niveau ?

Ma deuxième question, est comment faire un interval pour retarder certaine fonction ? J'ai chercher mais je ne trouve toujours pas ...

Merci

8 réponses

billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
16 juil. 2009 à 09:17
Bonjour,

Concernant les variables globales, cela dépend de ton besoin:
- S'il s'agit de variable d'application, alors tu peux travailler avec le fichier de configuration de ton application. Ainsi, tu pourras accéder facilement à tes variables que ne seront disponibles qu'en lecture (pour les modifier, il te faudra le faire à la mano). Ceci répond bien à un besoin de variables qui ne changent pas lors de l'exécution de ton appli.
Url: http://nico-pyright.developpez.com/tutoriel/vc2005/configurationsectioncsharp/

- S'il s'agit de variables relatives à l'utilisateur (ie préférences de l'utilisateur qui peuvent être sauvegardées par ce dernier), regardes ma réponse à ce post: http://www.csharpfr.com/forum/sujet-LIRE-ECRIE-PARTIR-FICHIER-APP-CONFIG_1322630.aspx

- S'il s'agit de variables qui ne doivent être initialisées qu'une seule et unique fois, je te conseille de suivre le design pattern "Singleton": http://odalet.wordpress.com/2006/06/20/pattern-singleton-thread-safe-en-c-cest-facile/
Ce qui te donne:
public class MySingleton
{
private static readonly MySingleton instance = new MySingleton();

//Tes variables
public string Text { get; set; }
public int Number { get; set; }

// Constructor (private)
private MySingleton()
{
Initialize();
}

private void Initialize()
{
//Tu initialise tes variables ici (par rapport à une base de données ou peu importe...)
this.Text = "Text";
this.Number = 1;
}

public static MySingleton Instance { get { return instance; } }
}
Tu y auras accès facilement avec le code:
string text = MySingleton.Instance.Text;

- Sinon, si ton besoin est assez simple, il te suffit de faire (comme Lutinore l'a dit) uniquement une variable static dans une classe.
public class Class1
{
public static string Text = "Text";
}
string text = Class1.Text;

Voila tout,

Bonne journée,

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
3
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
16 juil. 2009 à 10:24
Salut

"Ma deuxième question, est comment faire un interval pour retarder certaine fonction ? J'ai chercher mais je ne trouve toujours pas ..."

Comme dit Lutinore, Thread.Sleep(int millisec); - namespace System.Threading - bloque le thread courant. Attention donc que le thread ne répond pas. Si c'est le thread principal, ton programme aura l'air d'avoir planté (pas de réactualisation de l'image, etc. Cependant, c'est vrai qu'il s'agit d'une méthode très simple.

Si cependant elle ne te convient pas, si tu utilises Windows Forms, tu peux te renseigner sur le composant Timer - namespace System.Windows.Forms -. Si tu n'utilises pas Windows Forms, tu peux te renseigner sur la classe Timer - namespace System.Timers -.
Ces 2 classes fonctionnent à peu près de la même façon : Tu crées un objet, tu définis un intervalle, tu attaches une méthode à un événement de cet objet, puis tu fais Start() sur ton objet.

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
16 juil. 2009 à 08:05
Salut, C# est totalement orienté objet et la notion de portée globale n'existe pas pour les variables.. Pour partager des variables entre plusieurs classes, elle peuvent être déclarées statiques ( mot clé : static ) dans la classe principale ou dans un classe dédiée qui elle même peut être statique.

Thread.Sleep bloque le thread courant.
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
16 juil. 2009 à 09:14
L'idéal si vraiment tu veux des variables globales est de passer par une classe dite "Singleton".


Sébastien FERRAND
Consultant Sénior
Microsoft Visual C# MVP
0

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

Posez votre question
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
16 juil. 2009 à 09:25
Re,

J'ai oublié l'essentiel:
- s'il s'agit de variables relatives à ton interface: Label, Image, etc..., il te faut utiliser les fichiers "Resources" qui te permettront de facilement implémenter ces derniers pour d'autres langues: http://sharpertutorials.com/resource-files/

Voila, je crois qu'on a fait le tour.

Bonne journée,

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
0
jfleking Messages postés 7 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 28 juillet 2009
17 juil. 2009 à 00:45
Merci pour vos réponse ! Mais une autre petite question sur le Thread.Sleep(int millisec); dois-je faire un clear un moment donner ?

Comment en actionscript ou on fesait un clear de l'interval pour la stopper ?

Merci
0
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
17 juil. 2009 à 09:16
Bonjour,

Un Thread.Sleep(..) ne requiert pas d'action de "stop" particulière. Cette action permet uniquement de faire attendre le process un temps donnée.
Au contraire, la mise en place d'un Timer (System.Timers.Timer) devra être stopper (méthode Stop()) si la propriété AutoReset est à true.

Bonne journée,


Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
17 juil. 2009 à 09:57
En ce qui concerne les contrôles System.Windows.Forms.Timer, ils n'ont pas de propriété AutoReset je crois, mais cependant ils continuent à appeler la méthode déléguée indéfiniment. Si tu utilises ce contrôle, tu devras donc faire un Stop() dans la méthode attachée à l'événement (contrairement à un System.Timers.Timer où tu as juste à mettre AutoReset à false).

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
0
Rejoignez-nous