Proprietà di sola lettura e di sola scrittura
Fa parte della sezione Programmazione orientata agli oggetti del percorso C# di Coddy. Lezione 11 di 70.
A volte hai bisogno di proprietà che possano essere solo lette o solo scritte. Puoi controllarlo usando private sui singoli accessor.
Una proprietà di sola lettura ha un getter pubblico ma un setter privato (o non ha affatto un setter):
public class User
{
public string Username { get; private set; }
public User(string username)
{
Username = username;
}
}Il codice esterno può leggere Username, ma solo la classe stessa può modificarlo. Questo è utile per i valori che dovrebbero essere impostati una sola volta durante la costruzione.
Una proprietà di sola scrittura ha un setter pubblico ma un getter privato:
public class Account
{
public string Password { private get; set; }
public bool ValidatePassword(string input)
{
return input == Password;
}
}Le proprietà di sola scrittura sono rare ma utili per dati sensibili come le password, quando vuoi accettare un input senza esporre il valore memorizzato.
Puoi anche creare proprietà davvero di sola lettura con solo un getter:
public class Circle
{
public double Radius { get; }
public double Area => Math.PI * Radius * Radius;
public Circle(double radius)
{
Radius = radius;
}
}Le proprietà con solo get; possono essere assegnate solo nel costruttore o al momento della dichiarazione, diventando immutabili dopo la creazione dell'oggetto.
Sfida
FacileCreiamo un sistema di configurazione sicuro che dimostri quando usare proprietà di sola lettura e di sola scrittura per proteggere i dati sensibili.
Creerai due file per organizzare il codice:
Config.cs: definisci una classeServerConfignello spazio dei nomiSettingsche gestisca la configurazione del server. Dovrebbe avere:- Una proprietà di sola lettura
ServerName(può essere impostata solo nel costruttore) - Una proprietà di sola lettura
Portcon un setter privato (impostata tramite il costruttore) - Una proprietà di sola scrittura
ApiKeyche memorizzi internamente una chiave segreta - Un metodo
ValidateApiKey(string key)che restituiscatruese la chiave fornita corrisponde a quella memorizzata - Un costruttore che accetti il nome del server e la porta
- Una proprietà di sola lettura
Program.cs: nel file principale, crea un oggettoServerConfigusando i valori di input, imposta la chiave API, quindi convalidala confrontandola con una chiave di prova.
Riceverai quattro input:
- Nome del server
- Numero di porta
- Chiave API da memorizzare
- Chiave API da convalidare
Stampa i dettagli del server e il risultato della convalida in questo formato:
Server: {ServerName}, Port: {Port}
API Key Valid: {True/False}Ad esempio, se gli input sono MainServer, 8080, secret123 e secret123, l'output dovrebbe essere:
Server: MainServer, Port: 8080
API Key Valid: TrueProvalo tu
using System;
using Settings;
class Program
{
public static void Main(string[] args)
{
// Leggi gli input
string serverName = Console.ReadLine();
int port = Convert.ToInt32(Console.ReadLine());
string apiKeyToStore = Console.ReadLine();
string apiKeyToValidate = Console.ReadLine();
// TODO: Crea un oggetto ServerConfig con serverName e port
// TODO: Imposta la chiave API usando la proprietà di sola scrittura
// TODO: Convalida la chiave API e stampa i risultati
// Formato: Server: {ServerName}, Port: {Port}
// API Key Valid: {True/False}
}
}
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