segunda-feira, 18 de janeiro de 2010

Variável Readonly vs Constante


Estava me perguntando qual a diferença entre uma variável readonly e uma constantes. Achei uma explicação ótima no livro Effective C#: 50 Specific Ways to Improve Your C#. Existem 3 diferenças entre elas:
1° Desempenho – constantes são registradas em tempo de compilação por isso são mais rápidas, já as variáveis readonly são registradas em tempo de execução.
Isso me faz lembrar o motivo de se chamar “variável readonly” se ela só possui um valor.
Essas “variáveis” podem receber seu valor no momento da criação da classe, por isso uma variável readonly do tipo static é no mínimo muito estranho, se campos static não são “instanciados” seu valor vai ser único e definido na escrita do código*.
2° Tipo de valor – Constantes recebem apenas valores primitivos, ou seja, int, string etc. Já as variáveis readonly são mais flexíveis, pode receber qualquer tipo de valor.










3° Atualização de versão – Lembra quando eu falei sobre o tipo de registro das constantes (compilação) e variáveis readonly (execução). Imagine a situação onde você tem um assembly que utiliza uma constante, tipo um enumeration como os tipos sanguíneos**. Com isso qualquer aplicação que faz uso do assembly basta atualizar a DLL para fazer uso dos novos valores.  Errado! Todos os projetos precisam ser recompilados, as constantes também são registradas nas DLL nas quais são usadas. Por isso se o assembly que faz uso da DLL não for recompilado, o valor utilizado por ela oriundo da constante vai continuar sendo o  antigo.

* é possivel ter uma varivel static onde seu valor é dinâmico (para o primeiro uso, mas isso é um outro post):


public static readonly DateTime _testRead = DateTime.Now.AddDays(5);

** foi só um exemplo :)

Nenhum comentário:

Postar um comentário