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 :

Classe en public obligatoirement


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien Qualité Logiciel
    Inscrit en
    Janvier 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Qualité Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 44
    Points : 45
    Points
    45
    Par défaut Classe en public obligatoirement
    Bonjour,

    J'ai une question qui me turlupine et je ne trouve pas réponse...
    Afin de passer un objet créer dans une classe vers une autre classe, j'ai du passé toutes mes classes en "public" car sinon VS me disait "Accessibilité incohérente : le type de paramètre ... est moins accessible..."

    Par contre on m'a toujours dit pour la sécurité du code qu'il faut essayer de mettre le moins de code en "public", dans mon cas j'ai du passer la moitié de mes classes en public...

    Je vous mets mon bout de code pour plus de clarté car j'ai surement fait une erreur de débutant ;-)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private void BUTTON_Nouveau_Click(object sender, EventArgs e)
            {
                // Ouvrir la fenêtre de création d'un nouveau concours
                Concours concours = new Concours();
                ParametreConcours creerConcours = new ParametreConcours("Création d'un concours", ref concours);
                if (creerConcours.ShowDialog() == DialogResult.OK)
                {
                    // Intégrer le nouveau concours
                    listConcours.Add(concours);
                    // Recharger la liste des concours
                    this.Charger_Grid();
                } 
            }
    Je crée ici une référence de l'objet de la classe Concours pour l'envoyer à la form "ParametreConcours" pour que celle-ci me remplisse l'objet et que je puisse l'intégrer dans ma collection par la suite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public ParametreConcours(string nomForm, ref Concours concours)
            {
                // Initialisation de la fenêtre
                InitializeComponent();
                InitForm(nomForm);
     
                _concours = concours;
            }
    Ici c'est le constructeur de la fenêtre "ParametreConcours", je récupère l'objet "concours" pour pouvoir le modifier dans cette fenêtre.

    Le soucis est donc que j'ai du mettre la classe Concours à public car sinon j'avais l'erreur cité au début...
    N'hésitez pas à me dire s'il y a une meilleur solution.

    Je vous remercie d'avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 184
    Points : 4 501
    Points
    4 501
    Par défaut
    euh les classes sont très souvent en publique a de rare exception près (classes interne a un projet/classe imbriqué)

    C'est surtout les attributs qui "doivent" être en private et accessible par des propriétés ainsi que certainnes fonctions qui non pas d'utilité à être disponible de l'exterieur

    Exemple un peu Bidon

    Ma Classe à une fonction Save(). Dedans j'appelle la méthode CreateConnection
    Save à une utilité à être public
    CreateConnection pas et sera donc private.

    Les constructeurs peuvent être parfois en private pour par exemple implémenter un singleton (ou gérer le nombre d'objets instanciable spossible)

  3. #3
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Pour les classes, la visibilité par defaut est 'internal' (alors que pour les membres, c'est 'private')

    Si tu travailles sur une appli assez simple, avec juste un projet dans ta solution par exemple, mets toutes tes classes en public. Une classe est soit public, soit internal; si elle est internal, ça veut dire qu'elle n'est pas accessible depuis une autre assembly. Si ta solution n'a qu'un projet, et donc qu'une assembly, il n'y a aucune différence entre internal et public, autant tout mettre à public.

    Par contre, à l'intérieur de tes classes, tu as effectivement intérêt à mettre le moins de choses possible en public, pour limiter le couplage entre tes différents composants.

    Par ailleurs, le mot clé 'ref' ne sert à rien dans ton constructeur. Tu devrais l'enlever.

  4. #4
    Membre du Club
    Homme Profil pro
    Technicien Qualité Logiciel
    Inscrit en
    Janvier 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Qualité Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 44
    Points : 45
    Points
    45
    Par défaut
    Merci bien pour vos explications claires et précises ;-)

    Il est vrai que je n'ai pas besoin d'envoyer une référence de l'objet, sans fonctionne aussi, je ne pensais pas retrouver les modifications effectuées dans la form "ParametreConcours", mais en fait si.

    Bonne fin de journée.

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

Discussions similaires

  1. [Débutant] Impossible d'appeler une class à portée "public"
    Par Alexandre le Grand dans le forum C#
    Réponses: 7
    Dernier message: 15/06/2013, 09h05
  2. Schéma public, obligatoire dans select ?
    Par boris_atw dans le forum Débuter
    Réponses: 2
    Dernier message: 26/04/2010, 13h39
  3. préfixe public. obligatoire?
    Par Zenklys dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 17/03/2008, 21h50
  4. probleme: class A:public B< A::ref >
    Par vincho dans le forum C++
    Réponses: 7
    Dernier message: 22/04/2007, 03h55
  5. Réponses: 8
    Dernier message: 10/09/2005, 20h12

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