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

Windows Forms Discussion :

[C#] Problèem accesibilité classe


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Par défaut [C#] Problèem accesibilité classe
    Bonjour à tous !

    J'ai un problème lors de "l'instanciation" (je ne sais pas si on dit comme cela) de ma classe.

    Voilà la classe:

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
     
        class app_settings
        {
            private XmlDocument xml_app_settings = new XmlDocument();
            private StreamReader str;
     
            private int LOCALFILE_MAXSIZE;
            private int LOCALFILE_MAXDISPLAYCHAR;
            private int NETWORK_TCPSEND;
            private int NETWORK_TCPRECEIVE;
     
            public app_settings()
            {
                this.str = File.OpenText(new PathFile().file_app_settings);
                this.xml_app_settings.Load(this.str);
                //Chargement des données du fichier xml dans les variables privées.
                try
                {
                    this.LOCALFILE_MAXSIZE = Convert.ToInt32(xml_app_settings.SelectSingleNode("/APP_SETTINGS/LOCALFILE/MAXSIZE").InnerText.Trim());
                    this.LOCALFILE_MAXDISPLAYCHAR = Convert.ToInt32(xml_app_settings.SelectSingleNode("/APP_SETTINGS/LOCALFILE/MAXDISPLAYCHAR").InnerText.Trim());
                    this.NETWORK_TCPSEND = Convert.ToInt32(xml_app_settings.SelectSingleNode("/APP_SETTINGS/NETWORK/TCPSEND").InnerText.Trim());
                    this.NETWORK_TCPRECEIVE = Convert.ToInt32(xml_app_settings.SelectSingleNode("/APP_SETTINGS/NETWORK/TCPRECEIVE").InnerText.Trim());
                }
                catch (Exception e)
                {
                    new Error("", e.Message);
                }
            }
            public int AS_LOCALFILE_MAXSIZE { get { return this.LOCALFILE_MAXSIZE; } }
            public int AS_MAXDISPLAYCHAR { get { return this.LOCALFILE_MAXDISPLAYCHAR; } }
            public int AS_NETWORKTCPSEND { get { return this.NETWORK_TCPSEND; } }
            public int AS_NETWORKTCPRECEIVE { get { return this.NETWORK_TCPRECEIVE; } }
     
        }


    Et quand je défini un nouvel objet de cette classe (dans une une autre classe):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        public partial class Manual : UserControl
        {
     
            public app_settings AS = new app_settings();
    ...
    public Manual()
    {
    ...
    }
    ....

    J'ai l'erreur suivante

    Accessibilité incohérente*: le type de champ 'Webeuredi.app_settings' est moins accessible que le champ 'Webeuredi.Manual.AS'
    Je veux mettre le mot "public" devant car je voudrais que cet objet (AS) soit accessible depuis n'importe quel endroit de mon application.


    Pourquoi ai-je cette erreur ?
    Pourquoi n'ai je pas d'erreur lorsque j'enlève le mot public ???


    Merci pour votre aide !!!

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 16
    Par défaut
    est ce que cela marche en déclarant hors de la classe? l'objet sera accessible partout à l'intérieur de l'espace de noms.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    app_settings AS;
    public class app_settings{...}
    public partial class Manual:Usercontrol {...}
    Immerczeck

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Par défaut
    Bonjour immerczeck,

    Merci pour ton aide,
    ça fonctionne lorsque je mets public devant la déclaratin de ma classe.

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
     
    public class app_settings
        {
            private XmlDocument xml_app_settings = new XmlDocument();
            private StreamReader str;
     
            private int LOCALFILE_MAXSIZE;
            private int LOCALFILE_MAXDISPLAYCHAR;
            private int NETWORK_TCPSEND;
            private int NETWORK_TCPRECEIVE;
     
            public app_settings()
            {
                this.str = File.OpenText(new PathFile().file_app_settings);
                this.xml_app_settings.Load(this.str);
                //Chargement des données du fichier xml dans les variables privées.
                try
                {
                    this.LOCALFILE_MAXSIZE = Convert.ToInt32(xml_app_settings.SelectSingleNode("/APP_SETTINGS/LOCALFILE/MAXSIZE").InnerText.Trim());
                    this.LOCALFILE_MAXDISPLAYCHAR = Convert.ToInt32(xml_app_settings.SelectSingleNode("/APP_SETTINGS/LOCALFILE/MAXDISPLAYCHAR").InnerText.Trim());
                    this.NETWORK_TCPSEND = Convert.ToInt32(xml_app_settings.SelectSingleNode("/APP_SETTINGS/NETWORK/TCPSEND").InnerText.Trim());
                    this.NETWORK_TCPRECEIVE = Convert.ToInt32(xml_app_settings.SelectSingleNode("/APP_SETTINGS/NETWORK/TCPRECEIVE").InnerText.Trim());
                }
                catch (Exception e)
                {
                    new Error("", e.Message);
                }
            }
            public int AS_LOCALFILE_MAXSIZE { get { return this.LOCALFILE_MAXSIZE; } }
            public int AS_MAXDISPLAYCHAR { get { return this.LOCALFILE_MAXDISPLAYCHAR; } }
            public int AS_NETWORKTCPSEND { get { return this.NETWORK_TCPSEND; } }
            public int AS_NETWORKTCPRECEIVE { get { return this.NETWORK_TCPRECEIVE; } }
     
        }

    Est-ce que ça pose un problème de faire ça ??

  4. #4
    Membre émérite
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public partial class Manual : UserControl
    est une class partial de la class
    Tu peux pas avoir un membre avec une plus grande porté que la class qui l'implémente, si tuveux faire ce que tu veux, met la class Manual en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public partial class Manual
    Aussi, si je peux te donné des petites recommendation sur ton code.
    Je te dirais d'essayer de te diriger vers les standard de microsoft.
    CAD:
    Majuscule = constante
    Utilise tjrs des _ pour des variable private, comme dans ton cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private int _localfileMaxSixe;
    Aussi, utilise les accessor pour rejoindre tes variables private, même si tu est dans la même class.
    Par exemple
    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 MyClass
    {
    public MyClass(int id)
    {
    Id = id;
    }
    
    private int _id;
    public int Id
    {
    get { return _id; }
    private set { _id = value }
    }
    }
    De cette facon, tu renforci énormément ton code, de plus, de l'extérieur, tu va seulement pouvoir faire un get de ton Id car le set est private. Aussi, si jamais tu veux inserer une logique avant ton set, et bien tu va devoir le faire a un seul endroit.
    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    private int _id;
    public int Id
    {
    get { return _id; }
    private set 
    {
    if (value == 1)
     _id = 1
    else 
    _id = value;
    }
    }
    Alors, que toi dans ta facon de faire, tu va devoir faire le if à chaque fois que tu veux setter la valeur de _id.

    Ceci est simplement des petits trucs pour bien programmer et avoir du code + propre. Ce n'est rien de personnel, seulement des astuces entre ami programmeur

    Bonne continuation

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Par défaut
    Bonjour shwin !
    Merci beaucoup pour les conseils !!
    J'ai modidifié mon code en essayant de suivre tes conseils !
    C'est bon comme cela ?

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
     
     
        public class app_settings
        {
            private XmlDocument _xmlAppSettings = new XmlDocument();
            private StreamReader str;
     
            private int _localfileMaxSize;
            private int _localfileMaxDisplayChar;
            private int _networkTcpSend;
            private int _networkTcpReceive;
     
            public app_settings()
            {
                this.str = File.OpenText(new PathFile().file_app_settings);
                this._xmlAppSettings.Load(this.str);
                //Chargement des données du fichier xml dans les variables privées.
                try
                {
                    this.AS_localfileMaxSize = Convert.ToInt32(_xmlAppSettings.SelectSingleNode("/APP_SETTINGS/LOCALFILE/MAXSIZE").InnerText.Trim());
                    this.AS_localfileMaxDisplayChar = Convert.ToInt32(_xmlAppSettings.SelectSingleNode("/APP_SETTINGS/LOCALFILE/MAXDISPLAYCHAR").InnerText.Trim());
                    this.AS_networkTcpSend = Convert.ToInt32(_xmlAppSettings.SelectSingleNode("/APP_SETTINGS/NETWORK/TCPSEND").InnerText.Trim());
                    this.AS_networkTcpReceive = Convert.ToInt32(_xmlAppSettings.SelectSingleNode("/APP_SETTINGS/NETWORK/TCPRECEIVE").InnerText.Trim());
                }
                catch (Exception e)
                {
                    new Error("", e.Message);
                }
            }
            public int AS_localfileMaxSize
            {
                get { return _localfileMaxSize; }
                private set { _localfileMaxSize = value; }
            }
            public int AS_localfileMaxDisplayChar 
            { 
                get { return _localfileMaxDisplayChar; }
                private set { _localfileMaxDisplayChar = value; }
            }
            public int AS_networkTcpSend 
            { 
                get { return _networkTcpSend; } 
                private  set { _networkTcpSend = value; } 
            }
            public int AS_networkTcpReceive 
            { 
                get { return _networkTcpReceive; }
                private set { _networkTcpReceive = value; }
            }
     
        }


    Cependant, il y a encore une chose que je ne comprends pas.
    Je déclare dans la classe Manual un nouvel objet app_settings.
    La classe manual, dans le code créé un objet de la classe client.
    Je voudrais avoir accès à l'objet app_settings créé dans la classe manual.
    Sui-je obligé de passé l'objet app_settings dans la constructeur de la classe manual ou est il possible de faire autrement ?
    Jai bien vu qu'on pouvait faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    class Client : Manual
    Et ainsi accéder à l'objet app_settings de la classe Manual.
    Mais le problème, c'est que la classe Client sera utilisée aussi par d'autre classe. (La classe automatic par exemple) ...




    PS: Vive les bleus quand même !!!! Et vive la France !

  6. #6
    Membre émérite
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Par défaut
    Salut LeNeindre, je comprend pas tres bien ce que tu veux faire. T
    Cependant, il y a encore une chose que je ne comprends pas.
    Je déclare dans la classe Manual un nouvel objet app_settings.
    La classe manual, dans le code créé un objet de la classe client.
    Je voudrais avoir accès à l'objet app_settings créé dans la classe manual.
    Sui-je obligé de passé l'objet app_settings dans la constructeur de la classe manual ou est il possible de faire autrement ?
    Jai bien vu qu'on pouvait faire

    Ce que je comprend:
    Tu déclare un app_settings dans la class Manual
    Tu créé un Client dans la class Manual
    Tu voudrais avoir access a l'instance app_clients de la class Manuel via la class Client ?

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Par défaut
    Tout à fait shwin !!

Discussions similaires

  1. [Super debutant] probleme de "classes"
    Par frett dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 26/03/2005, 12h43
  2. Problème de "Class"
    Par Mr.KisS dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 01/10/2004, 23h23
  3. probleme compilation classe avec Borland c++ compiler 5.5
    Par softblue dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 17/06/2004, 15h16
  4. problème de classe d'association
    Par Nip dans le forum Diagrammes de Classes
    Réponses: 8
    Dernier message: 08/06/2004, 16h08
  5. Probleme de classe CComplex
    Par Balls dans le forum MFC
    Réponses: 7
    Dernier message: 13/02/2004, 10h55

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