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

jfleking 7 Messages postés mardi 2 novembre 2004Date d'inscription 28 juillet 2009 Dernière intervention - 16 juil. 2009 à 07:20 - Dernière réponse : krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention
- 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
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 16 juil. 2009 à 09:17
3
Merci
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
---------------------

Merci billou_13 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 124 internautes ce mois-ci

Commenter la réponse de billou_13
Meilleure réponse
krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention - 16 juil. 2009 à 10:24
3
Merci
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 ! -

Merci krimog 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 124 internautes ce mois-ci

Commenter la réponse de krimog
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 16 juil. 2009 à 08:05
0
Merci
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.
Commenter la réponse de Lutinore
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 16 juil. 2009 à 09:14
0
Merci
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
Commenter la réponse de sebmafate
billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 16 juil. 2009 à 09:25
0
Merci
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
---------------------
Commenter la réponse de billou_13
jfleking 7 Messages postés mardi 2 novembre 2004Date d'inscription 28 juillet 2009 Dernière intervention - 17 juil. 2009 à 00:45
0
Merci
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
Commenter la réponse de jfleking
billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 17 juil. 2009 à 09:16
0
Merci
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
---------------------
Commenter la réponse de billou_13
krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention - 17 juil. 2009 à 09:57
0
Merci
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 ! -
Commenter la réponse de krimog

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.