IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinRT Discussion :

Meilleure solution qu'une variable globale [Débutant]


Sujet :

WinRT

  1. #1
    Membre à l'essai
    Homme Profil pro
    Software engineer
    Inscrit en
    Mai 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Software engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 14
    Points : 13
    Points
    13
    Par défaut Meilleure solution qu'une variable globale
    Bonjour à tous!

    Je développe actuellement une application Windows phone 8 et Windows 8.1 app et je dois utiliser une variable dans toutes mes pages.

    L'utilisateur va entrer un nom au tout début du programme et ce nom me permettra de faire des recherche dans ma base de donnée locale (SQLite) quelque soit la page en cours.

    Je suis novice dans le développement d'application en c# et la première idée qui m'est venue est d'utiliser une variable locale mais n'y a t il pas une meilleure solution que d'utiliser une variable local dans ce cas ?

    Merci de votre aide !

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 255
    Points : 445
    Points
    445
    Par défaut
    ChrisNilson,

    Il y a une petite ambigüité dans le post, tu parles de variable globale dans le titre et de locale dans le reste...passons.
    Si la variable ne doit plus être modifiée après l'entrée de l'user alors tu peux utiliser une propriété statique et y faire référence partout dans le reste du projet.
    Par exemple dans la classe MainPage tu peux créer une propriété:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public static string Nom {get;private set;}
    Ensuite tu récupères le nom par l'user (ailleurs et uniquement dans la class MainPage ) : Nom=...
    Enfin tu fais référence à Nom dans le reste du projet comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    string s = MainPage.Nom;
    Comme tu débutes:
    public > pour y accéder depuis les autres classes
    static > pas besoin de créer d'instance
    get > lecture de la Propriété
    private set > assignation de la Propriété uniquement dans la classe MainPage (plus sûr)

    Salutations.

  3. #3
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    On peu créer une classe de Contexte dans laquelle on mettra toute les variables à partager dans les différentes classes de l'application.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Internal Class ContextClass
    {
      internal string Nom = "" ; 
      internal string Prenom = "" ; 
    }
    // Dans le main, on passer l'instance de Context créée dans le Main à l'Init() de toutes les classes :
    ContextClass Context=new ContextClass() ;
    Context.Nom="BOND" ;
    Context.Prenom="James" ;
    ...
    ProcessClass1 TheProcess1 = new ProcessClass1() ;
    Process1.Init(ContextClass) ;
    // idem pour une form : TheSecondaryForm1.Init(ContextClass) ;
    
    internal ProcessClass1()
    {
       private ContextClass Context;
       internal void Init (ContextClass vContext) { Context=vContext ; }
       internal void ShowName() { MessageBox.Show(Context.Nom+" "+Context.Prenom) ; }
    }
    Une autre possibilité est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    internal Class ContextClass
    {
      internal static ContextClass StaticContext = new ContextClass() ;
      internal string Nom = "" ; 
      internal string Prenom = "" ; 
    }
    // Dans le main 
    StaticContext.Nom="BOND" ;
    StaticContext.Prenom="James" ;
    ProcessClass1 TheProcess1 = new ProcessClass1() ;
     
    internal ProcessClass1()
    {
       internal void ShowName() { MessageBox.Show(StaticContext.Nom+" "+StaticContext.Prenom) ; }
    }
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  4. #4
    Membre chevronné

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2009
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2009
    Messages : 966
    Points : 2 078
    Points
    2 078
    Par défaut
    Tous est dis.

    pour ma part j'utilise un peu prêt la même méthode.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     
     
        public class CInstance
        {
     
            public string Nom;
            public string Prenom;
     
            static CInstance mInstance;
            public static CInstance Instance
            {
                get
                {
                    if (mInstance == null) mInstance = new CInstance();
                    return CInstance.mInstance;
                }
                set { CInstance.mInstance = value; }
            }
            #endregion
    }
    classe que j'utilise ainsi ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    CInstance.Instance.Nom = "FORD";
    CInstance.Instance.Prenom= "Harrison";
    Petit conseil, n'hésite pas a créer des région et des classes type Identification avec Nom/prénom que tu mettra dans cette classe.
    c'est plus propre et plus facile a maintenir.

    autre conseil : n'en abuse pas non plus, c'est jamais bon de se trimbalé un train de marchandise dans son applications si tu n'en a pas besoin.
    un jour, quelqu'un a dit quelque chose...

  5. #5
    Membre à l'essai
    Homme Profil pro
    Software engineer
    Inscrit en
    Mai 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Software engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Fabiani Voir le message
    ChrisNilson,

    Il y a une petite ambigüité dans le post, tu parles de variable globale dans le titre et de locale dans le reste...passons.
    Si la variable ne doit plus être modifiée après l'entrée de l'user alors tu peux utiliser une propriété statique et y faire référence partout dans le reste du projet.
    Par exemple dans la classe MainPage tu peux créer une propriété:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public static string Nom {get;private set;}
    Ensuite tu récupères le nom par l'user (ailleurs et uniquement dans la class MainPage ) : Nom=...
    Enfin tu fais référence à Nom dans le reste du projet comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    string s = MainPage.Nom;
    Comme tu débutes:
    public > pour y accéder depuis les autres classes
    static > pas besoin de créer d'instance
    get > lecture de la Propriété
    private set > assignation de la Propriété uniquement dans la classe MainPage (plus sûr)

    Salutations.

    Merci à tous pour votre aide et désolé pour la réponse tardive (je n'avais pas vu les notifications...) j'ai opté pour la solution de Fabiani. Merci encore tout marche maintenant grâce à votre aide!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Sécurité] Activation d'une variable globale
    Par Ricou13 dans le forum Langage
    Réponses: 3
    Dernier message: 28/09/2005, 10h24
  2. [quai debutant] : creation d'une variable globale.
    Par bapman344 dans le forum Access
    Réponses: 4
    Dernier message: 23/06/2005, 11h33
  3. Réponses: 5
    Dernier message: 25/05/2005, 22h29
  4. Comment déclarer une variable globale
    Par davkick dans le forum C
    Réponses: 13
    Dernier message: 20/05/2005, 18h50
  5. utilisation d'une variable globale
    Par ZZ dans le forum ASP
    Réponses: 3
    Dernier message: 03/12/2003, 19h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo