Menu
Coddy logo textTech

Campi di supporto

Fa parte della sezione Programmazione orientata agli oggetti del percorso C# di Coddy. Lezione 17 di 70.

Le proprietà implementate automaticamente sono comode, ma a volte hai bisogno di un maggiore controllo su come una proprietà memorizza o recupera il proprio valore. È qui che entrano in gioco i campi di supporto. Un campo di supporto è un campo privato che memorizza i dati effettivi di una proprietà.

public class Product
{
    private decimal _price;  // Campo di supporto
    
    public decimal Price
    {
        get { return _price; }
        set { _price = value; }
    }
}

Questo sembra un lavoro aggiuntivo rispetto alle proprietà automatiche, ma i campi di supporto ti permettono di aggiungere logica. Per esempio, puoi convalidare i dati prima di memorizzarli:

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

Ora i prezzi negativi diventano automaticamente zero. Puoi anche trasformare i dati durante la lettura o la scrittura, registrare le modifiche o attivare altre azioni.

La convenzione di denominazione dei campi di supporto usa in genere un prefisso di sottolineatura (_price) o le lettere minuscole (price) per distinguerli dalla proprietà.

Quando usi proprietà implementate automaticamente come public decimal Price { get; set; }, il compilatore crea effettivamente per te un campo di supporto nascosto. I campi di supporto espliciti ti offrono la stessa memorizzazione con il pieno controllo sul comportamento.

challenge icon

Sfida

Facile

Costruiamo un sistema di sensori di temperatura che utilizza campi di supporto per convalidare e trasformare i dati quando vengono memorizzati e recuperati.

Creerai due file per organizzare il codice:

  • TemperatureSensor.cs: definisci una classe TemperatureSensor nello spazio dei nomi Sensors. Questo sensore misura la temperatura in Celsius, ma dobbiamo assicurarci che le letture rimangano entro limiti validi. Usa i campi di supporto per implementare quanto segue:
    • Una proprietà Location (stringa) con un campo di supporto _location. Quando imposti la posizione, se il valore è null o vuoto, memorizza invece "Unknown".
    • Una proprietà Temperature (double) con un campo di supporto _temperature. Quando imposti la temperatura, limita il valore all'intervallo compreso tra -50 e 150 (se è inferiore a -50, memorizza -50; se è superiore a 150, memorizza 150).
    • Una proprietà di sola lettura TemperatureFahrenheit che calcola e restituisce la temperatura in Fahrenheit usando la formula: (celsius * 9 / 5) + 32. Deve usare direttamente il campo di supporto.
    • Un costruttore che accetta i valori della posizione e della temperatura iniziale.
  • Program.cs: nel file principale, crea un sensore usando i valori di input e visualizza le sue letture. Poi aggiorna la temperatura con un secondo valore di input e mostra le letture aggiornate.

Riceverai tre input:

  • Posizione del sensore
  • Lettura della temperatura iniziale
  • Lettura della temperatura aggiornata

Stampa l'output in questo formato:

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

Ad esempio, se gli input sono Lab Room, 25 e 200, l'output dovrebbe essere:

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

Nota come la seconda lettura di 200 venga limitata a 150 perché supera la temperatura massima valida. I campi di supporto ti consentono di controllare come vengono memorizzati i dati!

Provalo tu

using System;
using Sensors;

class Program
{
    public static void Main(string[] args)
    {
        // Leggi gli input
        string location = Console.ReadLine();
        double initialTemp = Convert.ToDouble(Console.ReadLine());
        double updatedTemp = Convert.ToDouble(Console.ReadLine());

        // TODO: Crea un TemperatureSensor con la posizione e la temperatura iniziale

        // TODO: Stampa la posizione del sensore e le letture della temperatura iniziale
        // Formato: "Sensor: {Location}"
        // Formato: "Temperature: {Temperature}C ({TemperatureFahrenheit}F)"

        // TODO: Aggiorna la temperatura del sensore con il nuovo valore

        // TODO: Stampa le letture della temperatura aggiornata
        // Formato: "Updated Temperature: {Temperature}C ({TemperatureFahrenheit}F)"
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore C# online