Le quartierC# C#Pièce 4/7Intermédiaire

Classes, propriétés et records

Modéliser une recette avec une classe, ses propriétés et son constructeur, puis découvrir les records pour des données simples comparables par valeur.

Ce que tu vas apprendre

  • Écrire une classe avec des propriétés, un constructeur et une méthode.
  • Protéger les données d'un objet avec private.
  • Utiliser un record pour des données simples, comparées par leur contenu.

Pourquoi une classe

Jusqu'ici, une recette était une simple variable string. Or une recette a un nom, un temps de préparation et des ingrédients. Une classe regroupe ces informations et les actions associées dans un même modèle.

Une classe est un plan. Un objet est un exemplaire construit à partir de ce plan. Avec une classe Recette, tu peux créer autant de recettes que tu veux.

Une première classe

Recette.cs
public class Recette
{
    public string Nom { get; set; }
    public int Minutes { get; set; }

    public Recette(string nom, int minutes)
    {
        Nom = nom;
        Minutes = minutes;
    }

    public string Resume() => $"{Nom} ({Minutes} min)";
}

Cette classe contient trois éléments :

  1. Deux propriétés, Nom et Minutes : des données de l'objet, lues et modifiées avec get et set.
  2. Un constructeur, une méthode qui porte le nom de la classe et prépare l'objet à sa création.
  3. Une méthode Resume qui utilise les propriétés.

Le mot-clé public rend l'élément accessible depuis l'extérieur de la classe.

Créer et utiliser un objet

Avec le mot-clé new, tu appelles le constructeur :

Program.cs
var crepes = new Recette("Crêpes", 30);

Console.WriteLine(crepes.Nom);
Console.WriteLine(crepes.Resume());

crepes.Minutes = 25;

L'écriture objet.Membre accède à une propriété ou à une méthode. Chaque objet garde ses propres valeurs : modifier crepes ne change pas une autre recette.

Dans un projet avec instructions de niveau supérieur, mets la classe dans son propre fichier (Recette.cs) ou après le code de Program.cs. Un fichier par classe reste plus simple à relire.

Protéger les données

Rien n'empêche aujourd'hui d'écrire crepes.Minutes = -5. Pour contrôler une valeur, tu peux limiter son écriture.

Recette.cs
public class Recette
{
    public string Nom { get; }
    public int Minutes { get; private set; }

    public Recette(string nom, int minutes)
    {
        Nom = nom;
        Minutes = minutes;
    }

    public void Rallonger(int minutes)
    {
        if (minutes > 0) Minutes += minutes;
    }
}
  • Nom { get; } n'a pas de set : elle se fixe dans le constructeur puis ne change plus.
  • private set autorise la modification seulement à l'intérieur de la classe.

Le reste du programme passe désormais par Rallonger, qui vérifie la valeur. On appelle cette idée l'encapsulation.

Niveau d'accèsQui peut utiliser le membre
publicTout le programme
privateLa classe elle-même
protectedLa classe et ses classes filles (voir le chapitre suivant)

Les records

Beaucoup de classes ne servent qu'à porter des données. Un record est fait pour cela : en une ligne, tu obtiens les propriétés, le constructeur et d'autres comportements utiles.

public record Ingredient(string Nom, int Quantite);

var farine = new Ingredient("farine", 250);
Console.WriteLine(farine);   // Ingredient { Nom = farine, Quantite = 250 }

La liste entre parenthèses déclare des propriétés en lecture seule, remplies à la création. L'affichage d'un record est déjà lisible, sans code de plus.

Égalité par valeur et with

Deux objets d'une classe ordinaire sont égaux seulement s'ils sont le même objet. Deux records sont égaux quand leur contenu est identique :

var a = new Ingredient("farine", 250);
var b = new Ingredient("farine", 250);

Console.WriteLine(a == b);   // True

Un record ne se modifie pas. Pour obtenir une copie avec un changement, utilise with :

var plusDeFarine = a with { Quantite = 500 };
Console.WriteLine(plusDeFarine);   // Ingredient { Nom = farine, Quantite = 500 }

L'objet a reste inchangé. Cette copie contrôlée évite des modifications par accident.

Classe ou record

BesoinChoix
Un objet qui change au fil du programme, avec des règlesclass
Une donnée simple, comparée par son contenurecord
Par défaut, pars sur un record pour tout ce qui décrit une donnée (un ingrédient, un prix, un résultat) et sur une class pour ce qui a un comportement et un état qui évolue (un panier de courses).

À retenir

  • Une classe est un plan ; new en crée un objet en appelant son constructeur.
  • Une propriété expose une donnée avec get et set ; private set ou l'absence de set la protège.
  • public ouvre un membre à tout le programme, private le réserve à la classe.
  • Un record déclare des données en une ligne, s'affiche lisiblement et se compare par son contenu.
  • with fabrique une copie d'un record avec une valeur changée.

Pour aller plus loin

Sources officielles

Ensuite

Projet
Lignes de code
Niveau
Le quartier
Appartement
C#
Pièce
4/7
Plan n°
csharp/04.classes-proprietes-records
Lignes de code · fiches rédigées à partir des documentations officielles, sources citées en bas de chaque page.