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 propiedad de solo lectura tiene un captador público, pero un establecedor privado (o no tiene ningún establecedor):

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 clase puede modificarlo. Esto es útil para valores que deben establecerse una sola vez durante la construcción.

Una propiedad de solo escritura tiene un setter público, pero un getter privado:

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 que solo tienen get; solo pueden asignarse en el constructor o en la declaración, lo que las hace inmutables después de crear el objeto.

challenge icon

Desafío

Fácil

Construyamos un sistema de configuración seguro que demuestre cuándo usar propiedades de solo lectura y 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 administre 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 privado (se establece mediante el constructor)
    • Una propiedad de solo escritura ApiKey que almacene internamente una clave secreta
    • Un método ValidateApiKey(string key) que devuelva true si la clave proporcionada coincide con la almacenada
    • Un constructor que acepte el nombre y el puerto del servidor
  • Program.cs: En tu archivo principal, crea un objeto ServerConfig usando valores de entrada, establece la clave de API y, después, valídala con una clave de prueba.

Recibirás cuatro entradas:

  • Nombre del servidor
  • Número de puerto
  • Clave de API que se almacenará
  • Clave de API 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 las entradas son MainServer, 8080, secret123 y secret123, la salida debería ser:

Server: MainServer, Port: 8080
API Key Valid: True

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