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 :)

quarta-feira, 13 de janeiro de 2010

resolvendo problema de nameSpace "Using alias directives"

     Hoje vamos falar de diretivas de Alias ou “Using alias directives”, de inicio esse recurso me pareceu ser uma funcionalidade sem uso pratico. Pense bem para que eu vou colocar um apelido a um namespace que e digitado uma vez no código. O Visual Studio deixou esse recurso sem qualquer uso pratico, simplesmente por ser mais pratico digitar o nome da classe é a IDE completar para você.
     Contudo esse recurso é bem pratico, quando você encontra um pequeno dilema “qual namespace usar”? Quem já se encontrou com uma Classe que existia em mais de um namespace? Tenho a classe “X”, mas essa classe “X” também existe em outro namespace, a IDE no momento de resolver esse namespace liberar como possibilidade de uso apenas o nome completo da classe, ou seja, “namspace.X” em todos os lugares que você tenha de chamar a classe.
          using MyClass = MyClass.Space.Space.MyClass;
Com isso você vai poder definir classe que você vai querer usar