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 :

Histoire de classe


Sujet :

Windows Forms

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2
    Par défaut Histoire de classe
    Bonjour tout le monde,

    Je dois dire que je suis programmeur C# du dimanche, je m'en sers à l'occase donc ne vous étonnez pas si la réponse vous parrait évidente :

    J'ai une classe "MonObjet" et une autre "MesObjets".
    La première est tout ce qui est de plus classique, on va dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class MonObjet
    {
       string var1;
       string var2;
       void MonObjet(string par1,string par2)
       {
          var1=par1;
          var2=par2;
       }
    }
    et la deuxième contient une liste de MonObjet et d'autres objets, 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
    16
    17
    class MesObjets
    {
       DateTime DerniereMAJ ;
       List<MonObjet> Liste;
     
       MesObjets()
       {
          Liste=new List<MonObjet>();
          DerniereMAJ=DateTime.Now;
       }
     
       void AjouteObjet(string par1,string par2)
       {
          Liste.Add(new MonObjet(par1,par2);
          DerniereMAJ=DateTime.Now;
       }
    }
    Intentionnellement je n'ai mis de "modifier" nullepart, parce que c'est surement ce qui m'embrouille en ce moment...
    Mon problème c'est que je ne veux pas pouvoir créer d'objet MonObjet mais seulement y acceder par les listes MesObjets...

    genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    LaListe.AjouteObjet("toto","titi");
    foreach (MonObjet wObj in LaListe.Liste)
    {
       bla bla bla...
    }
    donc interdit de trouver quelque part un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonObjet wObjet = new MonObjet("toto","titi");
    merci de votre aide...

  2. #2
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Il suffit de mettre la classe MonObjet en interne à la classe MesObjets et en private :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class MesObjets
    {
      ...
     
        private class MonObjet
        {
          ...
        }
    }
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  3. #3
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Citation Envoyé par laedit Voir le message
    Il suffit de mettre la classe MonObjet en interne à la classe MesObjets et en private[/code]
    En faisant de MonObjet un nested type privé tu ne pourras plus y accéder de l'extérieur, donc ça va coincer. Et si tu le mets en public tu reviens sur la problématique de départ. En l'état ce n'est donc pas suffisant.

    Ce que tu veux faire est possible à condition que MonObjet / MesObjets soient dans une bibliothèque de classes. Un constructeur de visibilité internal ferait alors l'affaire pour empêcher l'utilisateur d'instancier les objets lui même.

    Sinon tu passes par un nested type et une interface. Quelque chose dans ce genre
    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
    public interface IMonObjet
    {
        string Var1 { get; }
        string Var2 { get; }
    }
     
    public class MesObjets
    {
        public readonly List<IMonObjet> Liste = new List<IMonObjet>();
     
        public void Ajoute(string par1, string par2)
        {
            Liste.Add(new MonObjet(par1, par2));
        }
     
        private class MonObjet : IMonObjet
        {
            public string Var1 { get; private set; }
            public string Var2 { get; private set; }
     
            public MonObjet(string par1, string par2)
            {
                this.Var1 = par1;
                this.Var2 = par2;
            }
        }
    }

  4. #4
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Si j'ai bien compris, MonObjet ne doit pas être accessible de l'extérieur, les informations seront récupérés par un autre biais, du coup la coup du nested type privé peut marcher.

    Ou alors j'ai mal compris le problème
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  5. #5
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Tout ce qu'on sait c'est que l'utilisateur ne doit pas pouvoir instancier la classe, il pourra juste accéder aux information de l'objet. Donc le type doit être visible mais non instanciable. C'est ce que je comprends du post de départ et l'exemple qu'il donne avec le foreach me conforte dans cette idée.

    On verra bien ce qu'en pense l'auteur de ce sujet

  6. #6
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Exact, j'avais zappé le foreach, ça m'apprendra à pas lire les énoncés en détail
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2
    Par défaut
    ouaip ! comme le dit StormimOn, le but c'est de ne permettre des "MonObjet" que dans des listes mais de pouvoir y accéder de l'extérieur. Comme un objet seul ne sert a rien et qu'à chaque ajout/modif/suppression d'un MonObjet dans la liste je veux faire quelques calculs sur celle-ci (et pas seulement la mise à jour de la date de modif, vous aviez compris), je veux interdire la creation d'objets en-dehors.

    Je vous remercie, les gars, je vais tester vos tuyaux et voir ce que ca donne ce soir et je vous tiens au jus.

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/12/2012, 15h41
  2. Réponses: 3
    Dernier message: 04/11/2010, 23h46
  3. Classe pour la création d'un graphe xy
    Par Bob dans le forum MFC
    Réponses: 24
    Dernier message: 03/12/2009, 17h20
  4. Réponses: 31
    Dernier message: 30/03/2006, 16h57
  5. Sortir un typedef d'une classe
    Par Theophil dans le forum C++Builder
    Réponses: 13
    Dernier message: 03/07/2002, 17h21

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