Clases estáticas en C#: Uso y beneficios prácticos

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

Resumen

Optimiza tu código en C# creando una clase estática de utilidades que centraliza tareas repetitivas: dibujar líneas, formatear títulos y generar beeps en consola. Este enfoque refleja el principio de la POO de ahorrar trabajo al evitar duplicación y concentrar lógica común en un solo lugar.

¿Qué es una clase estática y cómo se organiza en el proyecto?

Una clase estática no permite instancias y se usa directamente como si fuera un objeto único. Igual que Console, nunca se instancia, pero se llama con sus métodos disponibles. La idea: crear una carpeta "útil" (utilitario) y dentro el archivo Printer.cs bajo un namespace coherente.

¿Por qué usar una clase estática en C#?

  • Porque se usa sin crear objetos.
  • Porque concentra utilidades transversales.
  • Porque imita el patrón de Console, familiar y directo.

¿Cómo declarar la clase y el namespace?

  • Carpeta: útil.
  • Archivo: Printer.cs.
  • Namespace: util (o similar, consistente con tu solución).
using static System.Console; // para usar WriteLine y Beep directo

namespace util
{
    public static class Printer
    {
        // métodos aquí
    }
}

¿Cómo dibujar líneas y formatear títulos con Console?

Partimos de una acción frecuente: imprimir separadores y títulos con líneas. Se usan parámetros opcionales y métodos de cadenas como PadLeft junto con la propiedad Length para ajustar tamaños.

¿Cómo dibujar una línea con tamaño variable?

  • Se usa un parámetro opcional: tamaño con valor por defecto 10.
  • Se rellena una cadena vacía con PadLeft(tamaño, '=').
  • Opción: acortar llamadas con using static System.Console para invocar WriteLine sin prefijo.
public static void DibujarLinea(int tamaño = 10)
{
    var linea = string.Empty.PadLeft(tamaño, '=');
    WriteLine(linea);
}

Puntos clave: - Diferencia entre string y char: PadLeft recibe el carácter de relleno como char, no como string. - El orden correcto en PadLeft: primero el tamaño total, luego el carácter.

¿Cómo escribir un título con líneas arriba y abajo?

  • Primero se imprime el texto del título.
  • Luego se dibujan dos líneas del mismo largo del título.
  • Toque de formato: envolver el título con barra y espacios usando literales de cadena y el prefijo $.
public static void WriteTitle(string titulo)
{
    // formateo con barra al inicio y final
    var tituloFormateado = $"| {titulo} |";
    var tamaño = tituloFormateado.Length; // +4 por las barras y espacios

    DibujarLinea(tamaño);
    WriteLine(tituloFormateado);
    DibujarLinea(tamaño);
}

Uso sugerido:

Printer.DibujarLinea();       // línea de 10 por defecto
Printer.DibujarLinea(20);     // línea de 20
Printer.WriteTitle("Cursos escuela");

¿Cómo generar pitidos configurables con frecuencia, duración y cantidad?

Se generaliza el beep de consola con parámetros y un bucle while controlando el número de repeticiones mediante operador de decremento.

¿Qué parámetros necesita un beep útil?

  • Frecuencia en hertz.
  • Duración en milisegundos.
  • Cantidad de repeticiones.
public static void Beep(int hertz = 2000, int tiempo = 500, int cantidad = 1)
{
    while (cantidad > 0)
    {
        System.Console.Beep(hertz, tiempo);
        cantidad--; // decremento
    }
}

¿Cómo probar diferentes combinaciones?

  • Llamada simple con valores por defecto.
  • Frecuencia alta, tiempo medio, varias repeticiones.
Printer.Beep();                // 2000 Hz, 500 ms, 1 vez
Printer.Beep(10000, 500, 10);  // 10 kHz, 500 ms, 10 veces

Ideas clave que aprendiste: - Clase estática y su uso directo como Console. - Parámetros opcionales para valores por defecto. - Diferencia entre string y char en métodos como PadLeft. - Propiedad Length para calcular tamaños dinámicos. - Bucle while y operador de decremento para controlar repeticiones. - using static System.Console para simplificar llamadas a WriteLine y Beep.

¿Te gustaría proponer otras utilidades para Printer o mejorar el formateo de títulos? Comparte tus ideas y ejemplos en los comentarios.