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.
Sfida
FacileCostruiamo 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 classeTemperatureSensornello spazio dei nomiSensors. 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-50e150(se è inferiore a -50, memorizza -50; se è superiore a 150, memorizza 150). - Una proprietà di sola lettura
TemperatureFahrenheitche 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.
- Una proprietà
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)"
}
}
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
1Fondamenti della programmazione orientata agli oggetti
File esterniNamespace e direttiveIntroduzione a classi e oggettiLa parola chiave "this"Metodi e parametriCampi e proprietàCostruttoriInizializzatori di oggettiRiepilogo - Calcolatrice semplice4Ereditarietà
Sintassi di base dell'ereditarietà (:)La parola chiave 'base'Parole chiave virtual e overrideClassi sealedLa classe base 'object'Riepilogo - Gerarchia dei dipendenti7Funzionalità avanzate
Sovraccarico degli operatoriIndicizzatori (this[])Override di ToString()Metodi di estensioneRiepilogo - Lista personalizzata10Pattern di progettazione Parte 1
Introduzione ai pattern di progettazioneSingleton thread-safePattern FactoryPattern Observer (eventi)Pattern Strategy2Proprietà e membri statici
Proprietà implementate automaticamenteProprietà di sola lettura e di sola scritturaCampi e metodi staticiClassi staticheMembri con corpo di espressione5Polimorfismo e interfacce
Polimorfismo a compile time e runtimeInterfaccia o classe astrattaInterfacce multipleInterfacce espliciteUpcasting e downcastingRipasso: calcolatore di forme8Concetti avanzati di programmazione a oggetti
Composizione invece dell'ereditarietàTipi generici (classi e metodi)Delegati ed eventiAttributi e reflectionIDisposable e istruzione usingNozioni di base sull'iniezione delle dipendenze11Pattern di progettazione, parte 2
Pattern del ComandoPattern dell’AdattatorePattern del DecoratorePattern Template MethodPattern dello StatoPattern Composito3Architettura delle classi
Dati di istanza vs staticiParole chiave 'readonly' e 'const'Campi di supportoRiepilogo - Gestore di conti bancari6Incapsulamento
Modificatori di accessoProprietà per l'incapsulamentoImplementazione dell'occultamento dei datiModelli di immutabilitàRiepilogo - Registri degli studentiEsercitati da solo: Compilatore C# online