Menu
Coddy logo textTech

Clases estáticas

Parte de la sección Programación Orientada a Objetos del Journey de C# de Coddy — lección 13 de 70.

Cuando una clase contiene solo miembros estáticos y nunca necesitas crear instancias de ella, puedes declarar la clase completa como static. Esto le indica al compilador que la clase no puede ser instanciada y solo puede contener miembros estáticos.

public static class MathHelper
{
    public static double Pi = 3.14159;
    
    public static int Square(int number)
    {
        return number * number;
    }
    
    public static int Add(int a, int b)
    {
        return a + b;
    }
}

Utilizas las clases estáticas de la misma manera que utilizas los miembros estáticos, llamándolos directamente por el nombre de la clase:

int result = MathHelper.Square(5);
double pi = MathHelper.Pi;

Las clases estáticas tienen restricciones importantes. No se puede crear una instancia con new, no pueden tener constructores de instancia y no pueden ser heredadas. Solo pueden contener campos, propiedades y métodos estáticos.

Las clases Console y Math que has estado utilizando son ejemplos perfectos de clases estáticas. Proporcionan funcionalidad de utilidad sin necesidad de un estado de objeto. Las clases estáticas son ideales para agrupar métodos auxiliares relacionados o constantes que no requieren ningún dato específico de la instancia.

challenge icon

Desafío

Fácil

Vamos a construir una utilidad de conversión de temperatura utilizando una clase estática para agrupar métodos auxiliares relacionados que no requieren ningún estado de objeto.

Crearás dos archivos para organizar tu código:

  • TemperatureConverter.cs: Define una clase estática llamada TemperatureConverter en el espacio de nombres Utilities. Esta clase debe contener:
    • Un campo estático AbsoluteZeroCelsius establecido en -273.15
    • Un método estático CelsiusToFahrenheit(double celsius) que convierte Celsius a Fahrenheit usando la fórmula: (celsius * 9 / 5) + 32
    • Un método estático FahrenheitToCelsius(double fahrenheit) que convierte Fahrenheit a Celsius usando la fórmula: (fahrenheit - 32) * 5 / 9
    • Un método estático IsAboveAbsoluteZero(double celsius) que devuelve true si la temperatura está por encima del cero absoluto
  • Program.cs: En tu archivo principal, utiliza la clase estática para realizar las conversiones. Lee un valor de temperatura en Celsius desde la entrada, luego muestra las conversiones y la validación.

Recibirás una entrada: un valor de temperatura en Celsius.

Imprime los resultados en este formato:

{celsius}C = {fahrenheit}F
{fahrenheit}F = {convertedBack}C
Above Absolute Zero: {True/False}
Absolute Zero: {AbsoluteZeroCelsius}C

Por ejemplo, si la entrada es 25, la salida debería ser:

25C = 77F
77F = 25C
Above Absolute Zero: True
Absolute Zero: -273.15C

Recuerda que las clases estáticas no pueden ser instanciadas; llamarás a todos los métodos directamente sobre el nombre de la clase como TemperatureConverter.CelsiusToFahrenheit(25).

Hoja de referencia

Una clase static solo puede contener miembros estáticos y no puede ser instanciada. Se utiliza para agrupar métodos de utilidad y constantes relacionados que no requieren el estado de un objeto.

public static class MathHelper
{
    public static double Pi = 3.14159;
    
    public static int Square(int number)
    {
        return number * number;
    }
    
    public static int Add(int a, int b)
    {
        return a + b;
    }
}

Se accede a los miembros de una clase estática directamente a través del nombre de la clase:

int result = MathHelper.Square(5);
double pi = MathHelper.Pi;

Restricciones de las clases estáticas:

  • No se pueden instanciar con new
  • No pueden tener constructores de instancia
  • No se pueden heredar
  • Solo pueden contener campos, propiedades y métodos estáticos

Los ejemplos comunes incluyen las clases Console y Math, que proporcionan funcionalidad de utilidad sin necesidad del estado del objeto.

Pruébalo tú mismo

using System;
using Utilities;

class Program
{
    public static void Main(string[] args)
    {
        // Leer la temperatura en Celsius
        double celsius = Convert.ToDouble(Console.ReadLine());
        
        // TODO: Usar los métodos estáticos de TemperatureConverter para:
        // 1. Convertir celsius a fahrenheit
        // 2. Convertir fahrenheit de nuevo a celsius
        // 3. Comprobar si la temperatura está por encima del cero absoluto
        // 4. Obtener la constante del cero absoluto
        
        // TODO: Imprimir los resultados en el formato requerido:
        // {celsius}C = {fahrenheit}F
        // {fahrenheit}F = {convertedBack}C
        // Above Absolute Zero: {True/False}
        // Absolute Zero: {AbsoluteZeroCelsius}C
        
    }
}
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