Class qui instancie une autre classe

eddy21 -  
 eddy21 -
Bonjour à tous !

Je suis développeur C# débutant, et je me demande quelle est la façon correcte de résoudre mon problème. Des exemples seront plus explicites :

Je souhaite sérialiser-déserialiser des objets contenus dans une List<Personne> qui généreraient un XML du genre :

<?xml version="1.0" encoding="UTF-8">
<ArrayOfPersonne>
  <Personne>
    <Nom>DUPONT</Nom>
    <Prenom>Jean</Prenom>
    <Adresse>
      <Ville>Paris</Ville>
       <Cp>75000</Cp>
     </Adresse>
  </Personne>
  <Personne>
    <Nom>JAQUES</Nom>
    <Prenom>Bernard</Prenom>
    <Adresse>
      <Ville>Montpellier</Ville>
      <Cp>34000</Cp>
    </Adresse>
  </Personne>
</ArrayOfPersonne>


J'ai donc une classe Personne :

class Personne{
  string nom, prenom;

  public string Prenom
  {
    get { return prenom; }
    set { prenom= value; }
  }

  public string Nom
  {
    get { return nom; }
    set { nom = value; }
  }

  public Personne()
  {
  }

  public Personne(string unPrenom, string unNom)
  {
    prenom = unPrenom;
    nom = unNom;
  }

}


Ainsi qu'une classe Adresse :

class Adresse{
  string ville, cp;

  public string Ville
  {
    get { return ville; }
    set { ville= value; }
  }

  public string Cp
  {
    get { return cp; }
    set { cp= value; }
  }

  public Adresse()
  {
  }

  public Adresse (string uneVille, string unCp)
  {
    ville = uneVille;
    cp = unCp;
  }

}


Je n'ai pas préciser ici les paramètres pour la sérialisation XML, ceux ci ne me posant pas (encore ^^) de problèmes.

Je souhaiterai donc savoir comment gérer en C# l'imbrication de l'objet Adresse dans l'objet Personne et surtout comment le(s) valoriser ? Passer les paramètres de Adresse dans le constructeur de Personne ne me semble pas être la bonne méthode...

Merci de votre aide :)

2 réponses

  1. Utilisateur anonyme
     
    Bonsoir

    tu peux faire comme ça
    class Personne{
      string nom, prenom;
      Adresse adresse;
    
      public string Prenom
      {
        get { return prenom; }
        set { prenom= value; }
      }
    
      public string Nom
      {
        get { return nom; }
        set { nom = value; }
      }
    
      public Adresse Adresse
      {
        get { return adresse; }
        set { adresse = value; }
      }
    
      public Personne()
      {
      }
    
      public Personne(string unPrenom, string unNom, Adresse MonAdresse)
      {
        prenom = unPrenom;
        nom = unNom;
        adresse = Adresse;
      }
    
    }

    1
  2. eddy21
     
    Bonsoir Whismeril, et merci pour ta réponse !

    La manière correcte est donc de passer d'inclure l'objet Adresse comme propriété de la classe Personne pour pouvoir passer l'adresse dans le constructeur de Personne ?

    Merci
    0
    1. Utilisateur anonyme
       
      Bonjour, c'est une manière de faire.
      Par contre, ça te limite à une adresse par personne.
      Tu peux aussi mettre une liste d'adresse, en ajoutant une propriété "type" à la classe adresse.
      Ainsi tu peux ajouter une adresse de type domicile, une de type travail, etc....

      --
      0
    2. Utilisateur anonyme
       
      class Personne{
        string nom, prenom;
        List<Adresse> adresses;
      
        public string Prenom
        {
          get { return prenom; }
          set { prenom= value; }
        }
      
        public string Nom
        {
          get { return nom; }
          set { nom = value; }
        }
      
        public List<Adresse> Adresses
        {
          get { return adresses; }
          set { adresses = value; }
        }
      
        public Personne()
        {
           mesAdresses = new List<Adresse>();//si tu passes par ce constructeur, la liste sera instanciée et tu pourras utiliser ses méthodes (add par exemple) sans te poser la question si c'est fait ou pas.
        }
      
        public Personne(string unPrenom, string unNom, List<Adresse> MesAdresses)
        {
          prenom = unPrenom;
          nom = unNom;
          adresses = MesAdresses;
        }
      
      }
      0
    3. eddy21
       
      D'accord, merci beaucoup pour ta réponse, je vais faire comme ça ! Nous verrons si d'autre solutions se présentent :)
      0