Menu
Coddy logo textTech

Propiedades de solo lectura y escritura

Parte de la sección Programación Orientada a Objetos del Journey de C# de Coddy. Lección 11 de 70.

A veces necesitas propiedades que solo se puedan leer o solo escribir. Puedes controlar esto usando private en accessors individuales.

Una property de solo lectura tiene un getter público, pero un setter private (o ningún setter):

public class User
{
    public string Username { get; private set; }
    
    public User(string username)
    {
        Username = username;
    }
}

El código externo puede leer Username, pero solo la propia class puede modificarlo. Esto resulta útil para valores que deben establecerse una sola vez durante el constructor.

Una property de solo escritura tiene un setter public pero un getter private:

public class Account
{
    public string Password { private get; set; }
    
    public bool ValidatePassword(string input)
    {
        return input == Password;
    }
}

Las propiedades de solo escritura son poco frecuentes, pero útiles para datos confidenciales como las contraseñas, cuando quieres aceptar input sin exponer el valor stored.

También puedes crear propiedades realmente de solo lectura con solo un getter:

public class Circle
{
    public double Radius { get; }
    public double Area => Math.PI * Radius * Radius;
    
    public Circle(double radius)
    {
        Radius = radius;
    }
}

Las propiedades con only get; solo pueden asignarse en el constructor o en la declaración, lo que las hace inmutables después de la creación del object.

challenge icon

Desafío

Fácil

Construyamos un sistema de configuración seguro que demuestre cuándo usar propiedades de solo lectura y de solo escritura para proteger datos confidenciales.

Crearás dos archivos para organizar tu código:

  • Config.cs: Define una clase ServerConfig en el espacio de nombres Settings que gestione la configuración del servidor. Debe tener:
    • Una propiedad de solo lectura ServerName (solo se puede establecer en el constructor)
    • Una propiedad de solo lectura Port con un setter private (se establece mediante el constructor)
    • Una propiedad de solo escritura ApiKey que stores una clave secreta internamente
    • Un método ValidateApiKey(string key) que returns true si la clave proporcionada matches la almacenada
    • Un constructor que accepts el nombre del servidor y el puerto
  • Program.cs: En tu archivo principal, crea un ServerConfig object usando valores de input, establece la API key y después valídala contra una clave de prueba.

Recibirás cuatro inputs:

  • Nombre del servidor
  • Número de puerto
  • API key que se almacenará
  • API key que se validará

Imprime los detalles del servidor y el resultado de la validación con este formato:

Server: {ServerName}, Port: {Port}
API Key Valid: {True/False}

Por ejemplo, si los inputs son MainServer, 8080, secret123 y secret123, el resultado debería ser:

Server: MainServer, Port: 8080
API Key Valid: True
FORMATO DE SALIDA OBLIGATORIO: [Tu contenido traducido aquí]

Pruébalo tú mismo

using System;
using Settings;

class Program
{
    public static void Main(string[] args)
    {
        // Leer entradas
        string serverName = Console.ReadLine();
        int port = Convert.ToInt32(Console.ReadLine());
        string apiKeyToStore = Console.ReadLine();
        string apiKeyToValidate = Console.ReadLine();

        // TODO: Crea un objeto ServerConfig con serverName y port

        // TODO: Establece la clave API usando la propiedad de solo escritura

        // TODO: Valida la clave API e imprime los resultados
        // Formato: Server: {ServerName}, Port: {Port}
        //         API Key Valid: {True/False}
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de C# online