babe59
Messages postés189Date d'inscriptionvendredi 28 mai 2004StatutMembreDernière intervention27 novembre 2015
-
30 nov. 2009 à 12:35
babe59
Messages postés189Date d'inscriptionvendredi 28 mai 2004StatutMembreDernière intervention27 novembre 2015
-
30 nov. 2009 à 14:40
Bonjour,
Je me suis inspiré d'un exemple donné sur ce site pour utiliser des variables globales. Jusqu'à maintenant je me passais de ce type de variables. Mais dans le cas présent, je dois aller chercher des données (chaine de connexion) dans un ficheir XML et donc pour des questions de temps de réponse, je ne veux charger qu'une seule fois ce fichier...
Voici ce que j'ai fait
public sealed class Globals
{
internal static String connectionStringAAA = Caso.GetConnectionString("aaa");
internal static String connectionStringBBB = Caso.GetConnectionString("bbb");
}
Pour l'utilisation, je fais
String AAA = Globals.connectionStringAAA
(exemple)
j'utilise mes globales dans plusieurs classe de mon projet et je me suis aperçu que les méthodes
Caso.GetConnectionString("...");
n'étaient appelées qu'une seul fois (point d'arrêt).
Ma question : Est-ce parce que mes variables globales sont de type "static" qu'à l'utilisation de mes Globals ne sont chargées qu'une seule fois ?
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 30 nov. 2009 à 13:42
Salut
Oui, c'est le principe des variables "static". Mais je ne comprends pas vraiment ce que tu veux : d'un côté tu souhaites ne charger le fichier qu'une seule fois et d'un autre tu te plains que ta méthode ne soit appelé qu'une fois...
Pour être précis au niveau des variables statiques, elles sont initialisées au moment où on y accède la première fois (si je me souviens bien). Puis elles gardent leur valeur jusqu'à ce que tu la change toi-même.
Krimog : while (!(succeed = try())) ; - Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé ! -
babe59
Messages postés189Date d'inscriptionvendredi 28 mai 2004StatutMembreDernière intervention27 novembre 2015 30 nov. 2009 à 13:51
Non, je ne me plains pas qu'elle soit appelée qu'une seule fois (au contraire). C'est plutot un constatation "positive". c'est ce que je recherchais à faire.
Ta remarque qur l'init des static confirme le fonctionnement
Merci
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 30 nov. 2009 à 14:06
Ah, ok, dans ce cas, c'est parfait.
Tu peux également utiliser le design pattern "singleton", qui correspond à un objet accessible depuis n'importe quelle classe, mais dont il n'existe qu'une instance.
Un truc du genre
public class MonSingleton
{
private MonSingleton() {} // Ctor private pour éviter d'instancier la classe
private static MonSingleton _instance = null; // Instance unique de la classe
public static Instance
{
get
{
if(_instance null) _instance new MonSingleton();
return _instance;
}
}
/*
* Et là toutes tes méthodes / variables / propriétés (mais sans le mot-clé static)
*/
}
Puis quand tu voudras accéder à ton objet, tu auras juste à faire
MonSingleton.Instance.MaMethode();
Tu auras l'avantage d'avoir ton constructeur, de pouvoir faire jouer l'héritage, et de manipuler un objet plutôt qu'une classe.
Krimog : while (!(succeed = try())) ; - Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé ! -
babe59
Messages postés189Date d'inscriptionvendredi 28 mai 2004StatutMembreDernière intervention27 novembre 2015 30 nov. 2009 à 14:40
Merci pour la précision sur le singleton. Je vais garder la première solution dans ce contexte, mais ta précision m'a permis de comprendre le fonctionnement/rôle d'un singleton (que je devrai sans aucun doute utiliser un jour)