Class qui instancie une autre classe

Fermé
eddy21 - 30 sept. 2014 à 15:29
 eddy21 - 1 oct. 2014 à 16:38
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

Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 928
30 sept. 2014 à 19:25
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
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
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 928
1 oct. 2014 à 07:26
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
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 928
Modifié par Whismeril le 1/10/2014 à 07:48
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
D'accord, merci beaucoup pour ta réponse, je vais faire comme ça ! Nous verrons si d'autre solutions se présentent :)
0