OldWiki. Structures - skaaj/ensc-support GitHub Wiki
Que faut-il savoir sur les structures ?
- Elles permettent d'encapsuler d'autres variables.
- Elles sont de types valeurs (cf. Fonctions)
Comment fonctionnent-elles ?
public class Program
{
struct Personne
{
public string prenom; // N'oubliez pas d'ajouter "public"
public string nom;
public int age;
}
static void Main(string[] args)
{
// 1. Instanciation
// 1.1 En utilisant "new"
Personne p1 = new Personne();
// p1 est remplit avec les valeurs par défaut des types:
// prenom = "" | car c'est un string
// nom = "" | idem
// age = 0 |car c'est un entier
AfficherPersonne(p1); // Affiche : " 0 ans"
// 1.2 En assignant tous les champs
Personne p2;
p2.prenom = "Benjamin"; // On accède aux variables encapsulée en utilisant un point (".")
p2.nom = "Denom";
p2.age = 22;
AfficherPersonne(p2); // Affiche : "Benjamin Denom 22 ans"
// 2. Exemple d'utilisation
// 2.1 Exemple simple
Anniversaire(ref p2); // On oublie pas le "ref" car une structure est un type valeur !
AfficherPersonne(p2); // Affiche : "Benjamin Denom 23 ans"
// 2.2 Chargement depuis un fichier
// Admettons qu'on ait un fichier "personnes.csv" ayant ce contenu :
// PRENOM;NOM;AGE
// Benjamin;Denom;22
// Random;Dude;85
// On souhaite le stocker dans notre programme
string[] lignes = System.IO.File.ReadAllLines("../../personnes.csv");
// On a nos lignes brutes mais on aimerait mieux structurer nos données grâce aux ...
// ... structures.
Personne[] personnes = new Personne[lignes.Length - 1]; // - 1 car on ne veut pas garder l'entête "PRENOM;NOM;AGE"
for (int i = 1; i < lignes.Length; i++) // de même, on ne commence pas à 0 mais 1 pour éviter l'entête
{
// D'abord on découpe notre ligne comme ceci :
string[] ligneDecoupee = lignes[i].Split(';'); // On découpe notre ligne grâce au caractère séparateur ";"
// Ici ligneDecoupee vaut quelque chose comme
// [0] = "Random"
// [1] = "Dude"
// [2] = "85"
// On a plus qu'à mettre à jour notre i-ème personne
// Attention, on itère sur i et comme on commence à un pour enlever l'entête
// on doit enlever 1 ici pour ne pas dépasser notre tableau de personnes (qui est d'une case plus petit que le tableau lignes)
personnes[i - 1].prenom = ligneDecoupee[0];
personnes[i - 1].nom = ligneDecoupee[1];
personnes[i - 1].age = int.Parse(ligneDecoupee[2]); // on oublie pas de transformer notre string "22" en un entier 22
}
// À cet endroit du code on a bien chargé notre fichier de personnes dans un tableau de "Personne"
// L'avantage est qu'on a pas un tableau par colonne (prénoms, noms, ages)
// Par exemple si je veux afficher le prénom de la deuxième personne il me suffit de faire :
Console.WriteLine(personnes[1].prenom); // Affiche : "Random"
// Et si c'est son anniversaire :
Anniversaire(ref personnes[1]);
AfficherPersonne(personnes[1]); // Affiche : "Random Dude 86 ans"
Console.ReadLine();
}
static void Anniversaire(ref Personne p)
{
p.age++;
}
static void AfficherPersonne(Personne p)
{
Console.WriteLine(p.prenom + ' ' + p.nom + ' ' + p.age + " ans");
}
}
Le code est disponible dans le repository associé à ce wiki.