Static readonly ou const em C#: o que escolher em 2025?

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: o debate eterno que nunca perde relevância



Imagine a situação: você está escrevendo código em C# e precisa declarar um valor que não deve mudar. O primeiro pensamento — const. O segundo — static readonly. E o terceiro — "Qual é, afinal, a diferença?".



Esta pergunta é uma das mais populares no Stack Overflow. Milhares de desenvolvedores, de iniciantes a seniores, continuam debatendo o que é melhor. E em 2025, com o lançamento de novas versões do .NET e C# 13, essa escolha se tornou ainda mais interessante.



Neste artigo, vamos esclarecer de uma vez por todas quando usar const e quando usar static readonly. Você aprenderá não apenas a teoria, mas também receberá regras claras que poderá aplicar hoje mesmo.



O que está por trás dos modificadores?



const: constante rígida

O modificador const em C# é literalmente um valor "gravado em pedra". Ele deve ser conhecido em tempo de compilação. O compilador substitui o valor da constante diretamente no código onde quer que ela seja usada.



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


Observe: const é sempre implicitamente static. Você não pode escrever static const — o compilador emitirá um erro.



static readonly: imutabilidade flexível

O modificador static readonly é um campo que é inicializado uma vez e nunca mais muda. A principal diferença: o valor pode ser calculado durante a execução do 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");    }}


Diferenças principais: tabela para comparação rápida



Vamos organizar tudo em uma tabela clara:



Característica const static readonly
Tempo de inicialização Compilação Execução (construtor estático)
Tipos permitidos Apenas primitivos (int, double, string, enum, bool) Qualquer tipo (incluindo referência)
Memória Valor copiado para cada assembly Referência única na memória
Compatibilidade de versões Problemas ao atualizar bibliotecas Seguro
Desempenho Máximo (substituição em tempo de compilação) Pequeno overhead no primeiro acesso


Quando escolher const?



Use const quando:

  • O valor é absolutamente imutável — constantes matemáticas (π, e), número de dias na semana, constantes físicas.
  • O valor precisa estar disponível em tempo de compilação — por exemplo, para atributos, switch/case, parâmetros padrão.
  • Você controla todo o código — e tem certeza de que a biblioteca não será atualizada separadamente.


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

// Uso em atributo —

Blogs

Book Recommendations