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

C# Discussion :

Variable, classe, novice


Sujet :

C#

  1. #1
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 26
    Par défaut Variable, classe, novice
    Salut j'ai une petite question. J'ai créer un tableau appelé matrix dans mon Main. Il faut que je réutilise ce tableau dans une autre fonction nommée "beaufort" ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     public class Program
        {public static void Main(string[] args){ 
      string[] alphabet = new string[27]{"A","B","C"};
                string[,] matrix = new string[27,27];
                [..]}
    
    public static string beaufort(string str){
             for (int laligne = 1; laligne < 27; laligne++)
                {
    matrix[1,laligne]
    }
                }

    Mais ça ne fonctionne pas comme ça, je pensais qu'il fallait jouer avec les "public" etc, mais c'est pas comme dans les structures apparemment. Donc j'apprécierais si quelqu'un pourrait m'aider vite fait il me semble que c'est assez facile mais j'arrive pas à mettre le doigt dessus

    Merci

  2. #2
    Membre très actif Avatar de oussi
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Maroc

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

    Informations forums :
    Inscription : Octobre 2009
    Messages : 192
    Par défaut
    Salut,
    Effectivement il faut utiliser "public" mais il faut aussi que la déclaration soit dans le contexte globale c'est à dire juste après le "public class Program"

    @++

  3. #3
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 26
    Par défaut
    Comme ceci ?

    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
     public class Program
        {
                string[] alphabet = new string[27]{"A","B","C"};
                string[,] matrix = new string[27,27];
     
           public static void Main(string[] args)
              { [..]}
     
    public static string beaufort(string str)
           {
                for (int laligne = 1; laligne < 27; laligne++)
                {
                    matrix[1,laligne]
                 }
            }
    Voici l'erreur qui apparait dans ce cas

    http://img34.imageshack.us/img34/3422/errw.jpg

  4. #4
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Non pas comme ceci car il faut obligatoirement que matrix soit déclarée static car beaufort est static.

    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
     
     public class Program
        {
                string[] alphabet = new string[27]{"A","B","C"};
                static string[,] matrix = new string[27,27];
     
           public static void Main(string[] args)
              { [..]}
     
    public static string beaufort(string str)
           {
                for (int laligne = 1; laligne < 27; laligne++)
                {
                    matrix[1,laligne]
                 }
            }

  5. #5
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 26
    Par défaut
    merci

  6. #6
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    De rien, sinon il y a une autre façon de l'écrire sans passer par le static.
    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
     
    public class Program
    {
      string[] alphabet = new string[27]{"A","B","C"};
      string[,] matrix = new string[27,27];
     
    public static void Main(string[] args)
    {
        new Program().beaufort(...);
    }
     
    public string beaufort(string str)
           {
                for (int laligne = 1; laligne < 27; laligne++)
                {
                    matrix[1,laligne]
                 }
            }
    Avec cela je pense que tu comprendras mieux pourquoi tu ne peux pas utiliser une variable de classe non static dans une méthode static de la class

  7. #7
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 26
    Par défaut
    Oui mais si je fais comme ça je ne peux plus l'utiliser dans le Main, donc je suis obligé de mettre static partout pour que la tableau puisse être utilisé dans les autres fonctions + le Main non ?

    Par exemple ceci ne fonctionne pas :
    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
    public class Program
        {
             string[] alphabet = new string[27] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "" };
             string[,] matrix = new string[27, 27];
     
             public static void Main(string[] args)
            {                
                for (int linie = 0; linie < 26; linie++)
                {
                    matrix[indexM1, 0] = alphabet[linie];
                }
     
            public string beaufort(string str)
            {
             for (int laligne = 1; laligne < 27; laligne++)
                {
                    matrix[1, laligne] = "g";
                }
              }

  8. #8
    Membre très actif Avatar de oussi
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Maroc

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

    Informations forums :
    Inscription : Octobre 2009
    Messages : 192
    Par défaut
    Salut,
    Il faut que tu le declare comme ça : @++

  9. #9
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par eltamatrox Voir le message
    Oui mais si je fais comme ça je ne peux plus l'utiliser dans le Main, donc je suis obligé de mettre static partout pour que la tableau puisse être utilisé dans les autres fonctions + le Main non ?

    Oui parce que main est static. Les raisons qui te poussent à vouloir l'utiliser absolument dans le main me sont obscures mais bon.

    Par exemple ceci ne fonctionne pas :
    Beh non c'est ce que j'essaie de t'expliquer. Une méthode statique ne peut travailler qu'avec des variables de classe qualifiées static car quand tu ne mets pas le qualificateur static devant matrix cela veut dire que la variable n'existe que pour une instance d'un objet d'où ma 2ième proposition pour te le faire voir

  10. #10
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 26
    Par défaut
    Citation Envoyé par hegros Voir le message
    Oui parce que main est static. Les raisons qui te poussent à vouloir l'utiliser absolument dans le main me sont obscures mais bon.
    Ce sont des exemples, concrètement je remplie le tableau dans le Main et ensuite j'exploite le tableau dans les fonctions. :-)
    (Pourquoi ? Ben parce que )


    Citation Envoyé par hegros Voir le message
    Beh non c'est ce que j'essaie de t'expliquer. Une méthode statique ne peut travailler qu'avec des variables de classe qualifiées static car quand tu ne mets pas le qualificateur static devant matrix cela veut dire que la variable n'existe que pour une instance d'un objet d'où ma 2ième proposition pour te le faire voir
    Oui c'est ce que j'ai compris, mais lorsque comme dans mon cas je dois utiliser le tableau dans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static void Main(string[] args){}
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static string beaufort(string str){}
    Je suis obligé de le déclarer comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static string[,] matrix = new string[27, 27];

    C'est ça non ?
    Sinon il faut enlever le static partout non


  11. #11
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    oui.

    Par contre tu ne pourras pas enlever le static de main et tu ne pourras pas non plus utiliser ton tableau en non static sans instancier un objet

  12. #12
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 26
    Par défaut
    OK donc tout est clarifié merci encore

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

Discussions similaires

  1. Visibilité Variable Classe Visual Studio 2008
    Par mulfycrowh dans le forum Visual C++
    Réponses: 1
    Dernier message: 05/10/2010, 07h17
  2. Accès variables classes
    Par PP(Team) dans le forum Langage
    Réponses: 5
    Dernier message: 17/08/2010, 14h07
  3. Passage variable classe fille -> classe mère
    Par Vincent F dans le forum C#
    Réponses: 4
    Dernier message: 13/07/2009, 17h46
  4. [PHP 5.3] Portée de variable: class > include > fonction
    Par Yanonix dans le forum Langage
    Réponses: 8
    Dernier message: 06/02/2009, 23h43
  5. [POO] Portée des variables, classe....
    Par Avatar dans le forum Langage
    Réponses: 3
    Dernier message: 27/11/2005, 21h25

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