Déclarer des variables pourqu'elles soient valables dans tous le programme

Résolu
Signaler
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008
-
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008
-
Bonjour,

J'aimerais faire la chose suivante. Défénir que par défaut une variable à la valeur false, que si on clique sur le bouton 1 elle prend la valeur true et que le bouton 2 teste si cette variables à la valeur true ou false. J'écris donc un truc du style :



bool variable = false;

private
void button1_Click(
object sender,
EventArgs e)


{



bool variable =
true;

}


private
void button2_Click(
object sender,
EventArgs e)
{



if (variable =
true){....}

}

Le truc c'est que je ne sais pas comment déclarer des variables pourqu'elles soient valables dans tous le programme. Ca va vous paraître bète mais ça fais un moment que je cherche et j'ai toujours des erreurs comme "The name 'variable' does not exist in the current context".
Un coup de pouce s'il vous plait ?


Mathmax

13 réponses

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
14 février 2014
38
124151 badrbadr >>> tu pourrais suivre... je n'ai jamais dit que le singleton était une variable... j'ai d'ailleur explique plus haut ce que c'est.

ludinski >>> petite corretion :
public class
Datas
{
// Instance unique de la classe
private static const
Datas _instance = new Datas();

private bool _variable;

// Le constructeur est privé pour éviter d'avoir plusieurs instances différentes
private
Datas()
{
_variable = false;
}

// Cette méthode retourne l'instance unique de la classe
public static
Datas GetInstance()
{

// Retourne l'instance
return _instance;
}

public bool
Variable
{
get{ return
_variable; }
set{ _variable = value
; }
}
}

Sébastien FERRAND
[MVP C#]
Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
3 novembre 2008
1
tu peux mettre ta variable en static
ainsi, elle sera independante des objets crées.

un autre tuc est de passé une référence de ta classe aux autres classes de ton programme. ces dernieres pouront alors acceder à variable grace à la référence.

Alors, pour résumer, soit que tu mets ta variable en mode static
public static bool variable = false;
ou encore que tu passes aux autres classes de ton programme une référence.

La première option est plus facile mais je ne suis pas sur qu'elle va te convenir

finalement, en C++ (en C# aussi je pense), je me rappèle qu'il y avait le mot-clé extern pour rendre ta variable globale...mais, j'ai oublié les détails de son fonctionnement cependant (je dis donc ca juste pour te mettre sur une piste potentiel)

bon, j espere que c etait clair, sinon n hesite pas a demander de plus amples renseignements
ceci dit, salut

@++
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
7
Salut,
Pour ma part, je créerai un projet nommé Globale de type Class Library,
contenant une classe Datas contenant la variable static,
et j'ajouterai la référence de cette classe à tous les projets de l'application...
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
14 février 2014
38
moi je crée un singleton...

Sébastien FERRAND
[MVP C#]
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008

Merci pour vos réponse. J'ai un peu tout essayé mais chaque méthode me pose problème :
J'ai d'abord essayé de mettre ma variable en static. Mais je ne sais pas où la placer et j'obtient à chaque fois le message suivant : "The modifier 'static' is not valid for this item".


J'avoue ne pas avoir trop compris le truc d'acceder à la variable grace à une référence.


Ensuite j'ai essayé le truc de LUDINSKI. J'ai donc crée une classe variable dans laquelle j'ai mis ma variable

class Datas


{


public bool variable


{


get


{


return variable;


}


set


{


variable= value;


}


}


}





Mais je ne sais pas exactement si c'est comme ça qu'il faut faire. Je ne vois par ailleurs pas comment faire pour qu'au lancement du programme, la variable prends la valeur false par exemple.

Enfin, je me suis renseigné sur ce qu'est le singleton. Il semble que ce soit plus pour créer une unique instance d'un objet et pour qu'elle est une porté générale pour toutes les classes du programme. Mais ma variable peut elle être considérée comme une instance d'objet ? Si oui comment lui appliquer le songleton. Pourrais tu me le montrer dans mon exemple stp ?

J'ai appris en faisont ces recherches que les variables globales n'étaient pas pris en charge par C# comme dans les anciennes versions de visual basic par exemple...

Mathmax
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
14 février 2014
38
les variables globales ne sont pas correctes dans le modèle objet...

Un singleton est une classe dont l'instance est statique... ca permet d'être sur que quelque soit l'endroit d'où tu l'appeleras "l'objet" sera la même...

l'une des utilisations les plus est le regroupement des variables qui permettent de gérer ton programme... (connectionstring, ...)
Sébastien FERRAND
[MVP C#]
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
7
Je pensais plutôt à ceci :


public class
Datas
{
private static bool _variable = false
; // Ici, j'initialise la variable

public static bool
Variable
{
get{ return
_variable; }
set{ _variable = value
; }
}
}

Et pour y accéder depuis une autre classe :

Datas.Variable = true;

Sans instancier la classe Datas...
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008

Merci Lundinski, ta méthode marche parfaitement.

J'ai cependant du mal à voir concrètement comment créer une variable singleton... un exemple ?

merci


Mathmax
Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
3 novembre 2008
1
un singleton n'est pas une variable, il s'agit d'une classe spéciale
de wikipidia:

On implante le modèle singleton en écrivant une classe contenant une méthode qui crée une instance uniquement s'il n'en existe pas encore. Sinon elle renvoie une référence vers l'objet qui existe déjà. Dans beaucoup de langages à objets, il faudra veiller à ce que le constructeur de la classe soit privé ou bien protégé, afin de s'assurer que la classe ne peut être instanciée autrement que par la méthode de création contrôlée.

pour plus d'info:
http://www.dofactory.com/Patterns/PatternSingleton.aspx
http://www.yoda.arachsys.com/csharp/singleton.htmlhttp://smeric.developpez.com/java/uml/singleton/
(bref, vas-y avec google ;D)

@++
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
7
Voici l'exemple que je t'ai proposé, mais sous forme de singleton :

public
class
Datas
{
// Instance unique de la classe
private static
Datas _instance;

private bool _variable;

// Le constructeur est privé pour éviter d'avoir plusieurs instances différentes
private
Datas()
{
_variable = false;
}

// Cette méthode retourne l'instance unique de la classe
public static
Datas GetInstance()
{
// La classe n'a encore jamais été instanciée
if( _instance == null
)
_instance = new
Datas();

// Retourne l'instance
return _instance;
}

public bool
Variable
{
get{ return
_variable; }
set{ _variable = value
; }
}
}

Et pour obtenir la valeur à partir d'une autre classe de ton appli :

Datas datas = Datas.GetInstance();
datas.Variable = true;
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008

Merci beaucoup pour ces précisions


Mathmax
Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
3 novembre 2008
1
sebmafate >> toi aussi, tu pourrais suivre....j'ai jamais dit que t'avais dit (lol) que les singleton étaient des variables. c'est mathmax qui avait dit ca dans le poste qui était avant le mien, je vais le citer :
J'ai cependant du mal à voir concrètement comment créer une variable singleton... un exemple ?

En tout cas, sinon c bien ce post-là parce que moi aussi je vais commencer a utiliser les singleton pour pratager des informations.

Salut

@++
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008

Bonjour,

Je voudrais à présent initialiser la variable au nombre entier représentant l'année. J'ai donc mis dans mon fichier Class1.cs :


DateTime CurrTime =
DateTime.Now;



private
static
int _annee = CurrTime.Year;

mais cela ne semble pas lui plaire... :-(

Savez-vous pourquoi ? Comment contourner le problème ?

Merci d'avance ;-).


Mathmax