Menu
Coddy logo textTech

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.

challenge icon

Sfida

Facile

Creiamo 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 classe ServerConfig nello spazio dei nomi Settings che gestisca la configurazione del server. Dovrebbe avere:
    • Una proprietà di sola lettura ServerName (può essere impostata solo nel costruttore)
    • Una proprietà di sola lettura Port con un setter privato (impostata tramite il costruttore)
    • Una proprietà di sola scrittura ApiKey che memorizzi internamente una chiave segreta
    • Un metodo ValidateApiKey(string key) che restituisca true se la chiave fornita corrisponde a quella memorizzata
    • Un costruttore che accetti il nome del server e la porta
  • Program.cs: nel file principale, crea un oggetto ServerConfig usando 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: True

Provalo 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}
    }
}
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