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);
}
Practica esta lección
Resuelve los ejercicios del curso de C# en la app, gratis y con corrección automática.
Empezar a practicar