C# - Usar readonly ou const ?
Neste artigo vou apresentar as duas formas usadas para definir constantes e suas características e quando usá-las no seu código. |
A linguagem C# possui duas versões diferentes de constantes :
Elas possuem diferentes comportamentos e usar a forma incorreta pode lhe causar problema.
Como regra geral, e, na maioria dos casos, você deve preferir constantes em tempo de execução(readonly) a constantes em tempo de compilação(const).
As constantes de tempo de compilação(const) são um pouco mais rápidas que as constantes de runtime(readonly) mas são menos flexíveis.
Assim, deixe para usar as constantes de tempo de compilação (const) para ocasiões quando o desempenho for crítico e o valor da constante nunca for alterado entre as liberações das versões do programa.
Sintaxe usada a nível de escopo de classe ou struct :
public const int Milenio = 2000;
private const double PI = 3.1415;
const double gravidade = 9.8;
|
public static readonly int Ano = 2017; private readonly int mes; readonly double Juros = 6.45; |
constante de tempo de compilação(compile-time) : const | constante de tempo de execução (runtime) : readonly |
|
|
As
diferenças no comportamento das constantes de tempo de compilação(const)
e as constantes de tempo de execução(readonly) seguem a forma como elas
são acessadas. Uma constante de tempo de compilação(const) é substituída
pelo valor dessa constante no código do seu objeto.
Dessa forma o código if ( data == Milenio ) vai
compilar para o mesmo código da linguagem intermediária (IL) que o código
if (data == 2000).
As
constantes de tempo de execução são avaliadas em tempo de execução. O IL gerado
quando você referencia uma constante somente leitura faz referência à variável
readonly, não ao seu valor.
As
constantes de tempo de compilação(const) são limitadas
a números, strings e nulos. Os valores somente
leitura são também constantes na medida em que não podem ser modificadas após o
construtor ter sido executado. Mas valores somente leitura são diferentes na
medida em que são atribuídos em tempo de execução. Você tem muito mais
flexibilidade quando esta trabalhando com constantes de tempo de execução.
Por um lado, as constantes de tempo de execução(readonly) podem ser de
qualquer tipo e você pode inicializá-los em um construtor, ou você pode usar um
inicializador. Assim você pode criar valores somente leitura das estruturas
DateTime enquanto que você não pode criar valores
DateTime usando const.
Você pode usar valores readonly para constantes de instâncias, armazenando valores diferentes para cada instância de um tipo da classe. As constantes de tempo de compilação são, por definição, constantes estáticas.
Então para não complicar demais o assunto quando for usar uma constante siga essas duas regras gerais :
E estamos conversados...
"Disse-lhe Jesus: Eu
sou o caminho, e a verdade e a vida; ninguém vem ao Pai, senão por mim"
João 14:6
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET