2 question de débutant !! [Résolu]

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

Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
21
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
---------------------
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
43
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 ! -
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
36
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.
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
34
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
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
21
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
---------------------
Messages postés
7
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
28 juillet 2009

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
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
21
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
---------------------
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
43
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 ! -