Menu
Coddy logo textTech

Champs de support

Fait partie de la section Programmation Orientée Objet du Journey C# de Coddy. Leçon 17 sur 70.

Les propriétés auto-implémentées sont pratiques, mais vous avez parfois besoin de plus de contrôle sur la façon dont une propriété stocke ou récupère sa valeur. C'est là que les champs de stockage interviennent. Un champ de stockage est un champ privé qui stocke les données réelles d'une propriété.

public class Product
{
    private decimal _price;  // Champ de stockage
    
    public decimal Price
    {
        get { return _price; }
        set { _price = value; }
    }
}

Cela semble représenter un travail supplémentaire par rapport aux propriétés automatiques, mais les champs de stockage vous permettent d'ajouter de la logique. Par exemple, vous pouvez valider les données avant de les stocker :

public class Product
{
    private decimal _price;
    
    public decimal Price
    {
        get => _price;
        set => _price = value < 0 ? 0 : value;
    }
}

Désormais, les prix négatifs deviennent automatiquement zéro. Vous pouvez également transformer les données lors de la lecture ou de l'écriture, enregistrer les modifications ou déclencher d'autres actions.

La convention de nommage des champs d'appui utilise généralement un préfixe de soulignement (_price) ou des minuscules (price) pour le distinguer de la propriété.

Lorsque vous utilisez des propriétés implémentées automatiquement comme public decimal Price { get; set; }, le compilateur crée en réalité un champ de stockage masqué pour vous. Les champs de stockage explicites vous offrent le même espace de stockage, avec un contrôle total sur le comportement.

challenge icon

Défi

Facile

Construisons un système de capteur de température qui utilise des champs de stockage pour valider et transformer les données lors de leur enregistrement et de leur récupération.

Vous allez créer deux fichiers pour organiser votre code :

  • TemperatureSensor.cs : Définissez une classe TemperatureSensor dans l'espace de noms Sensors. Ce capteur mesure la température en Celsius, mais nous devons nous assurer que les relevés restent dans des limites valides. Utilisez des champs de stockage pour implémenter les éléments suivants :
    • Une propriété Location (string) avec un champ de stockage _location. Lors de la définition de l'emplacement, si la valeur est nulle ou vide, stockez "Unknown" à la place.
    • Une propriété Temperature (double) avec un champ de stockage _temperature. Lors de la définition de la température, limitez la valeur entre -50 et 150 (si elle est inférieure à -50, stockez -50 ; si elle est supérieure à 150, stockez 150).
    • Une propriété en lecture seule TemperatureFahrenheit qui calcule et renvoie la température en Fahrenheit à l'aide de la formule : (celsius * 9 / 5) + 32. Elle doit utiliser directement le champ de stockage.
    • Un constructeur qui accepte les valeurs de l'emplacement et de la température initiale.
  • Program.cs : Dans votre fichier principal, créez un capteur à l'aide de valeurs saisies et affichez ses relevés. Mettez ensuite à jour la température avec une deuxième valeur saisie et affichez les relevés mis à jour.

Vous recevrez trois entrées :

  • Emplacement du capteur
  • Relevé de température initial
  • Relevé de température mis à jour

Affichez la sortie dans ce format :

Sensor: {Location}
Temperature: {Temperature}C ({TemperatureFahrenheit}F)
Updated Temperature: {Temperature}C ({TemperatureFahrenheit}F)

Par exemple, si les entrées sont Lab Room, 25 et 200, la sortie devrait être :

Sensor: Lab Room
Temperature: 25C (77F)
Updated Temperature: 150C (302F)

Remarquez comment le deuxième relevé de 200 est limité à 150, car il dépasse la température maximale valide. Vos champs de stockage vous donnent ce contrôle sur la manière dont les données sont enregistrées !

Essayez vous-même

using System;
using Sensors;

class Program
{
    public static void Main(string[] args)
    {
        // Lire les entrées
        string location = Console.ReadLine();
        double initialTemp = Convert.ToDouble(Console.ReadLine());
        double updatedTemp = Convert.ToDouble(Console.ReadLine());

        // TODO: Créer un TemperatureSensor avec l'emplacement et la température initiale

        // TODO: Afficher l'emplacement du capteur et les relevés de température initiaux
        // Format: "Sensor: {Location}"
        // Format: "Temperature: {Temperature}C ({TemperatureFahrenheit}F)"

        // TODO: Mettre à jour la température du capteur avec la valeur mise à jour

        // TODO: Afficher les relevés de température mis à jour
        // Format: "Updated Temperature: {Temperature}C ({TemperatureFahrenheit}F)"
    }
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur C# en ligne