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 :

Problème accessibilité de classe


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 171
    Par défaut Problème accessibilité de classe
    Bonjour à tous,

    dans mon projet j'ai une classe Joueur en Private

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Collections.ObjectModel;
    using System.ComponentModel;
     
    namespace LottoVerification
    {
        class Joueur : INotifyPropertyChanged
        {
            XmlReader reader = new XmlReader();
     
            private bool continuer;
            private string nom;
            private int id;
            private readonly ObservableCollection<NumeroLotto> numeros = new ObservableCollection<NumeroLotto>();
     
            public ObservableCollection<NumeroLotto> Numeros
            {
                get
                {
                    return numeros;
                }
            }
     
            public int Id
            {
                get
                {
                    return id;
                }
                set
                {
                    id = value;
     
                }
            }
     
            public Joueur(string p_nom, int p_num1, int p_num2, int p_num3, int p_num4, int p_num5, int p_num6)
            {
                id = reader.GetAvailableId();
                nom = p_nom;
                numeros.Add(new NumeroLotto(p_num1, false));
                numeros.Add(new NumeroLotto(p_num2, false));
                numeros.Add(new NumeroLotto(p_num3, false));
                numeros.Add(new NumeroLotto(p_num4, false));
                numeros.Add(new NumeroLotto(p_num5, false));
                numeros.Add(new NumeroLotto(p_num6, false));
            }
     
            public Joueur()
            {
                id = reader.GetAvailableId();
                nom = "";
                numeros.Add(new NumeroLotto());
                numeros.Add(new NumeroLotto());
                numeros.Add(new NumeroLotto());
                numeros.Add(new NumeroLotto());
                numeros.Add(new NumeroLotto());
                numeros.Add(new NumeroLotto());
            }
     
            public string Nom
            {
                set
                {
                    nom = value;
                    continuer = true;
     
                    if (String.IsNullOrEmpty(value))
                    {
                        continuer = false;
                        throw new ApplicationException();
                    }
                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("Nom"));
                    }
                }
                get
                {
                    return nom;
                }
            }
     
            public bool Continuer
            {
                get
                {
                    return continuer;
                }
                set
                {
                    continuer = value;
                }
            }
     
            public void trierNumeros()
            {
                NumeroLotto numTmp = new NumeroLotto();
     
                for (int i = 0; i < 6; i++)
                {
                    for (int j = 0; j < 6; j++)
                    {
                        if (i != j)
                        {
                            if (this.numeros[i].Numero < this.numeros[j].Numero)
                            {
                                numTmp = this.numeros[i];
                                this.numeros[i] = this.numeros[j];
                                this.numeros[j] = numTmp;
                            }
                        }
                    }
                }
     
            }
     
            public event PropertyChangedEventHandler PropertyChanged;
        }
    }
    et un formulaire qui me permet d'ajouter ces joueurs à un fichier XML.
    Seulement j'aimerais utiliser le formulaire d'Ajout pour faire de la modification.

    j'ai donc deux constructeur dans ma classe AjoutJoueur
    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 AjoutJoueur( ) /*Ajout*/
            {
                InitializeComponent();
                joueur = new Joueur("", 1, 2, 3, 4, 5, 6);
                this.DataContext = joueur;
                listNud.DataContext = joueur.Numeros;
            }
     
            public AjoutJoueur( Joueur p_joueur ) /*Modification*/
            {
                InitializeComponent();
                Joueur joueur = p_joueur;
                this.DataContext = joueur;
                listNud.DataContext = joueur.Numeros;
            }
    le deuxième constructeur possède donc en argument le joueur que je veux modifier.
    mais j'ai cette erreur sur le second constructeur

    Inconsistent accessibility: parameter type 'LottoVerification.Joueur' is less accessible than method 'LottoVerification.AjoutJoueur.AjoutJoueur(LottoVerification.Joueur)
    est ce dû au fait que ma classe Joueur est en private?
    Est ce qu'il y a une autre solution que de mettre tout en public?

    Merci

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    oui le problème vient bien du fait que ta classe est privée, un membre ne pas exposer quelque chose de moins exposé que lui

    soit rendre la méthode private, soit rendre la classe public et éventuellement le constructeur privé, voir aussi le design pattern factory si nécessaire, et aussi friend qui permet de réduire l'accès à l'assembly
    tu peux aussi mettre une classe dans une classe
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    La classe n'est pas privée (ça n'existe pas, sauf pour les classes imbriquées), elle est internal. Modifie ton constructeur pour le rendre internal aussi, et ça devrait être bon

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 171
    Par défaut
    voilà j'ai mis le constructeur d'AjoutJoueur en Internal, et ca fonctionne parfaitement.

    Quelle est la portée pour l'Internal? entre le private et le public?

    Merci

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    internal = accessible à partir de l'assembly où c'est déclaré

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 171
    Par défaut
    Un grand merci pour tes réponses

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

Discussions similaires

  1. [RMI] problème Création *_stub.class et *_skel.class
    Par philobedo dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 29/05/2006, 20h03
  2. [PHPMailer] problème avec la classe phpmailer
    Par sansouna24 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 08/04/2006, 16h51
  3. Problème avec la classe Calendar
    Par afrikha dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 30/03/2006, 08h48
  4. Réponses: 9
    Dernier message: 25/09/2005, 16h33
  5. [C#] Problème "Accessibilité incohérente"
    Par Oberown dans le forum Windows Forms
    Réponses: 4
    Dernier message: 29/11/2004, 15h52

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