Utilisation des accesseurs get et set en C#

Dans la programmation orientée objet, il est courant de protéger les champs internes d'une classe en les déclarant private. Pour permettre un accès contrôlé à ces champs depuis l'extérieur, C# propose les propriétés avec les accesseurs get et set.

Voici un exemple simple :

class Employe
{
    private string nom;
    private byte age;

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

    public byte Age
    {
        get { return age; }
        set 
        { 
            if (value is > 10 and <= 100)
                age = value;
        }
    }
}

L’accesseur get renvoie la valeur du champ privé, tandis que set permet de lui attribuer une nouvelle valeur via le mot-clé value. Cette approche permet d’ajouter facilement des validations ou des transfromations sans modifier l’interface publique de la classe.

Par exemple, supposons une classe représentant un thermomètre stockant la température en kelvins, mais exposant la valeur en degrés Celsius :

class Thermometre
{
    private double temperatureEnKelvin;

    public Thermometre(double celsiusInitial)
    {
        temperatureEnKelvin = celsiusInitial + 273.15;
    }

    public double TemperatureCelsius
    {
        get => temperatureEnKelvin - 273.15;
        set => temperatureEnKelvin = value + 273.15;
    }
}

Ainsi, même si la logique interne change, le code client reste inchangé :

var thermo = new Thermometre(40);
Console.WriteLine(thermo.TemperatureCelsius); // Affiche 40

Les propriétés peuvent être définies de plusieurs façons :

  • Propriété complète : avec implémentation explicite de get et/ou set.
  • Propriété automatique : lorsque aucune logique supplémentaire n’est nécessaire.
// Propriété automatique (lecture/écriture)
public string Email { get; set; }

// Propriété en lecture seule
public DateTime DateCreation { get; } = DateTime.Now;

// Propriété avec validation
private string _pseudo;
public string Pseudo
{
    get => _pseudo;
    set => _pseudo = string.IsNullOrWhiteSpace(value) ? "Anonyme" : value.Trim();
}

Contrairement à un champ public (public string nom;), une propriété permet de garantir l’encapsulation, d’appliquer des règles métier, et de préparer d’éventuelles évolutions futures sans rupture d’API.

Il est donc fortement rceommandé d’utiliser des propriétés plutôt que des champs publics, même dans les cas simples, car elles offrent une meilleure flexibilité et maintenabilité.

Étiquettes: C# Propriétés encapsulation get Set

Publié le 31 août à 15h20