Static readonly o const en C#: ¿qué elegir en 2025?

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: el eterno debate que no pierde vigencia



Imagina esta situación: estás escribiendo código en C# y necesitas declarar un valor que no debe cambiar. El primer pensamiento es const. El segundo es static readonly. Y el tercero: «¿Y cuál es realmente la diferencia?».



Esta pregunta es una de las más populares en Stack Overflow. Miles de desarrolladores, desde principiantes hasta seniors, siguen debatiendo cuál es mejor. Y en 2025, con el lanzamiento de nuevas versiones de .NET y C# 13, esta elección se ha vuelto aún más interesante.



En este artículo, aclararemos de una vez por todas cuándo usar const y cuándo usar static readonly. No solo aprenderás la teoría, sino que también obtendrás reglas claras que podrás aplicar hoy mismo.



¿Qué se esconde detrás de los modificadores?



const: constante rígida

El modificador const en C# es literalmente un valor «tallado en piedra». Debe conocerse en tiempo de compilación. El compilador sustituye el valor de la constante directamente en el código donde se utiliza.



public class MathConstants{    public const double Pi = 3.14159;    public const int DaysInWeek = 7;    public const string AppName = "MyApp";}


Ten en cuenta: const siempre es implícitamente static. No puedes escribir static const; el compilador mostrará un error.



static readonly: inmutabilidad flexible

El modificador static readonly es un campo que se inicializa una sola vez y nunca más cambia. La principal diferencia: el valor puede calcularse durante la ejecución del programa.



public class AppSettings{    public static readonly DateTime ReleaseDate = new DateTime(2025, 1, 15);    public static readonly Guid InstanceId = Guid.NewGuid();    public static readonly string ConfigPath = GetConfigPath();        private static string GetConfigPath()    {        return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "config.json");    }}


Diferencias clave: tabla de comparación rápida



Organicemos todo en una tabla clara:



Característica const static readonly
Momento de inicialización Compilación Ejecución (constructor estático)
Tipos permitidos Solo primitivos (int, double, string, enum, bool) Cualquier tipo (incluyendo tipos de referencia)
Memoria El valor se copia en cada assembly Referencia única en memoria
Compatibilidad de versiones Problemas al actualizar librerías Seguro
Rendimiento Máximo (sustitución en tiempo de compilación) Pequeña sobrecarga en el primer acceso


¿Cuándo elegir const?



Usa const cuando:

  • El valor es absolutamente inmutable — constantes matemáticas (π, e), número de días de la semana, constantes físicas.
  • El valor debe estar disponible en tiempo de compilación — por ejemplo, para atributos, switch/case, parámetros por defecto.
  • Controlas todo el código — y estás seguro de que la librería no se actualizará por separado.


// Ideal para constpublic class Physics{    public const double SpeedOfLight = 299792458; // m/s    public const double GravitationalConstant = 6.67430e-11; // m³/(kg·s²)}

// Uso en un atributo —

Blogs

Book Recommendations