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.
Desafío
FácilVamos 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 llamadaTemperatureConverteren el espacio de nombresUtilities. Esta clase debe contener:- Un campo estático
AbsoluteZeroCelsiusestablecido 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 devuelvetruesi la temperatura está por encima del cero absoluto
- Un campo estático
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}CPor ejemplo, si la entrada es 25, la salida debería ser:
25C = 77F
77F = 25C
Above Absolute Zero: True
Absolute Zero: -273.15CRecuerda 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
}
}
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
1Fundamentos de OOP
Archivos externosNamespaces y directivasIntro a clases y objetosLa palabra clave 'this'Métodos y parámetrosCampos vs PropiedadesConstructoresInicializadores de objetosResumen - Calculadora simple4Herencia
Sintaxis básica de herencia (:)La palabra clave 'base'Palabras clave Virtual y OverrideClases selladas (Sealed)La clase base 'object'Resumen: Jerarquía de empleados7Características avanzadas
Sobrecarga de operadoresIndexadores (this[])Sobrescritura de ToString()Métodos de extensiónResumen - Lista personalizada10Patrones de diseño - Parte 1
Introducción a los patrones de diseñoSingleton Thread-SafePatrón FactoryPatrón Observer (Eventos)Patrón Strategy2Propiedades y miembros estáticos
Propiedades autoimplementadasPropiedades de solo lectura y escrituraCampos y métodos estáticosClases estáticasMiembros con cuerpo de expresión5Polimorfismo e Interfaces
Polimorfismo: Compilación vs. EjecuciónInterfaz vs. Clase AbstractaInterfaces MúltiplesInterfaces ExplícitasUpcasting y DowncastingRepaso: Calculadora de Figuras8Conceptos avanzados de POO
Composición sobre herenciaGenéricos (clases y métodos)Delegados y eventosAtributos y ReflexiónIDisposable y la sentencia usingFundamentos de Inyección de dependencias11Patrones de diseño, parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón Composite3Arquitectura de clases
Datos de instancia vs. estáticosPalabras clave 'readonly' y 'const'Campos de respaldoResumen - Gestor de cuentas bancarias6Encapsulamiento
Modificadores de accesoPropiedades para el encapsulamientoImplementación de ocultamiento de datosPatrones de inmutabilidadRepaso - Registros de estudiantes