Constructores con parámetros opcionales en C#

Clase 13 de 32Fundamentos de C# con NET Core 2.1

Resumen

Aprende a escribir código más claro y flexible en C#: constructores con parámetros opcionales, sobrecarga, asignación de tuplas, argumentos con nombre y manejo seguro de cadenas. Además, refuerza conceptos como enumeraciones, propiedades, firma de métodos, concatenación e interpolación de texto. Todo con ejemplos directos y listos para usar en consola.

¿Cómo crear y sobrecargar constructores con parámetros opcionales en C#?

La idea clave: puedes definir varios constructores en una clase y agregar parámetros opcionales con valores por defecto. Así, el objeto se puede construir de distintas formas según lo necesites. Esto mejora la legibilidad y reduce errores.

  • Un constructor básico pide lo mínimo: nombre y año.
  • Un segundo constructor agrega un parámetro requerido: tipo de escuela (una enumeración).
  • Además, define parámetros opcionales: país y ciudad con valor por defecto vacío.
  • Las listas de parámetros se separan con coma. El punto y coma cierra instrucciones.
public enum TipoEscuela { Preescolar, Primaria, Secundaria }

public class Escuela
{
    public string Nombre { get; set; }
    public int Año { get; set; }
    public TipoEscuela Tipo { get; set; }
    public string País { get; set; } = "";
    public string Ciudad { get; set; } = "";

    // Constructor 1: mínimo requerido.
    public Escuela(string nombre, int año)
    {
        // Asignación de tuplas: compacto y claro.
        (Nombre, Año) = (nombre, año);
    }

    // Constructor 2: con parámetro requerido 'tipo' y opcionales 'país' y 'ciudad'.
    public Escuela(string nombre, int año, TipoEscuela tipo, string país = "", string ciudad = "")
    {
        (Nombre, Año, Tipo) = (nombre, año, tipo);
        País = país;              // Asignación directa.
        this.Ciudad = ciudad;     // Uso de 'this' para diferenciar campo y parámetro.
    }

    // Opcional: personalizar salida en consola.
    public override string ToString() => $"{Nombre} ({Tipo})";
}
  • Con argumentos con nombre, puedes enviar solo los opcionales que quieras y en cualquier orden.
int año = default;
var esc1 = new Escuela("La Silla Cadh-Cademy", año, TipoEscuela.Primaria, país: "Colombia", ciudad: "Bogotá");
var esc2 = new Escuela("La Silla Cadh-Cademy", año, TipoEscuela.Primaria, ciudad: "Bogotá"); // omite 'país'.

¿Por qué la firma permite múltiples versiones?

La firma de un método define: tipo de retorno, nombre y parámetros. Puedes sobrecargar métodos y constructores con el mismo nombre siempre que sus parámetros sean diferentes. Así eliges la versión más conveniente según el caso.

¿Cómo se separan listas y sentencias?

  • Punto y coma: final de una instrucción.
  • Coma: separa elementos dentro de una lista, por ejemplo, en parámetros.
  • Puedes dividir parámetros en varias líneas sin problema si no cierras la instrucción con punto y coma.

¿Cómo manejar cadenas, comillas y saltos de línea en consola?

Al imprimir texto, a veces necesitas incluir comillas dentro de la cadena o controlar la nueva línea correctamente.

  • Para dibujar comillas dentro de la cadena: usa la secuencia de escape \".
  • Para un salto de línea portátil: prefiere System.Environment.NewLine en lugar de "\n". Diferentes sistemas operativos manejan la nueva línea distinto; con Environment.NewLine obtienes el equivalente correcto dentro del framework.
var nombre = "La Silla Cadh-Cademy";
Console.WriteLine($"El nombre es \"{nombre}\".");

// Concatenación vs. interpolación.
var msg1 = "Hola, " + nombre;            // concatenación con +
var msg2 = $"Hola, {nombre}";             // interpolación con $

// Nueva línea segura entre sistemas.
Console.WriteLine("Primera línea." + System.Environment.NewLine + "Segunda línea.");
  • También puedes sobreescribir ToString() para definir cómo se muestra un objeto al imprimirlo.
  • La interpolación de cadenas ($"...{var}...") facilita el formateo y disminuye errores frente a la concatenación.

¿Qué conceptos y habilidades consolidaste en C# para consola?

Este bloque refuerza prácticas esenciales para escribir código robusto y legible.

  • Inicialización de objetos con la palabra clave new.
  • Propiedades: autoimplementadas y uso de this para evitar sombras de nombres.
  • Enumeraciones: mejoran legibilidad y reducen errores.
  • Constructores: múltiples sobrecargas con parámetros requeridos y opcionales.
  • Parámetros opcionales: valores por defecto que vuelven flexible la API.
  • Argumentos con nombre: puedes omitir y reordenar opcionales con claridad.
  • Firma de métodos: retorno, nombre y parámetros determinan la sobrecarga válida.
  • Asignación de tuplas: asigna varios valores en una sola línea.
  • Tipos de datos: string y entero en escenarios de consola.
  • Espacios de nombres: uso de System y Environment del framework.
  • Separadores: punto y coma para sentencias, coma para listas.
  • Cadenas: concatenación con + e interpolación con $.
  • Escape de caracteres: \" para comillas, System.Environment.NewLine para newline.

¿Tienes dudas o quieres compartir cómo aplicarías estos constructores y parámetros opcionales en tu proyecto? ¡Comenta y conversemos sobre tu caso!