Inicio > Cursos > C# > Clases, Propiedades y Constructores
C#POO en C#Lección 12 de 20

Clases, Propiedades y Constructores

C# tiene una característica única que lo distingue de Java: las Propiedades. En lugar de escribir métodos getNombre() y setNombre() manualmente, defines una propiedad con get y set: public string Nombre { get; set; }. El compilador crea automáticamente el campo privado y los métodos de acceso. Con { get; private set; } solo el código interno puede modificarla. Con { get; } o { get => cálculo; } creas propiedades de solo lectura o calculadas.

C# 12 introdujo los Primary Constructors: en lugar de declarar propiedades y luego asignarlas en el constructor, los parámetros del constructor se convierten directamente en propiedades. Los Object Initializers permiten inicializar propiedades después de crear el objeto: new Persona("Ana", 25) { Email = "ana@mail.com" }, lo que es especialmente útil cuando hay muchas propiedades opcionales. El operador with (para records y structs) crea una copia del objeto con algunos valores modificados.

public class Persona {
    // Auto-property (getter/setter automático)
    public string Nombre { get; set; }
    public int Edad { get; private set; } // Solo escritura interna
    
    // Property con lógica
    private string _email = "";
    public string Email {
        get => _email;
        set {
            if (!value.Contains("@"))
                throw new ArgumentException("Email inválido");
            _email = value;
        }
    }
    
    // Property calculada (solo get)
    public bool EsMayor => Edad >= 18;
    public string Saludo => $"Hola, soy {Nombre}";
    
    // Constructor principal
    public Persona(string nombre, int edad) {
        Nombre = nombre;
        Edad = edad;
    }
    
    // Constructor secundario - llama al principal
    public Persona(string nombre) : this(nombre, 0) { }
    
    // Métodos
    public void Cumpleaños() => Edad++;
    
    public override string ToString() => $"Persona({Nombre}, {Edad})";
}

// Uso
var p1 = new Persona("Ana", 25) { Email = "ana@mail.com" };
var p2 = new Persona("Bob"); // Usa constructor con 1 arg

Console.WriteLine(p1.EsMayor); // true
p1.Cumpleaños();
Console.WriteLine(p1); // Persona(Ana, 26)

// Primary constructor (C# 12)
public class Punto(double x, double y) {
    public double X { get; } = x;
    public double Y { get; } = y;
    public double Distancia => Math.Sqrt(X*X + Y*Y);
}
Consejo🏠 Las propiedades en C# son la forma correcta de exponer datos. Evitan exponer campos directamente (campos privados con getter/setter).
← LINQ Avanzado: GroupBy, Join, AggregateHerencia e Interfaces →

Practica esta lección

Resuelve los ejercicios del curso de C# en la app, gratis y con corrección automática.

Empezar a practicar