terça-feira, 6 de novembro de 2012

Fundamentals Framework (Conversão entre tipos)

E aí pessoal, mais uma matéria bem simples, porém, de suma importância para desenvolvedores .NET FRAMEWORK. O tema abordado é conversão entre tipos, ou seja, tipos de dados em que atribuímos pra uma variável qualquer. Em C#, a conversão implícita não é permitida quando há perda de precisão, pois ocorrerá erro em tempo de compilação.
Abaixo terá um código onde não há perca de precisão, desta forma, será executado normalmente tanto em compilação quanto em tempo de execução. O código exibe uma variável chamada inteiro do tipo int e recebe o valor 1, e outra chamada dobro que é do tipo double recebendo 1.0001. Atribuímos a variável inteiro para a double, aqui, como o tipo double suporta o tipo int, ou seja, não tem espaço maior em bytes, ocorrerá tudo bem.


Para terminar erigimos o conceito agora de boxing e unboxing. É um conceito simples onde boxing é a conversão de tipos de valor para tipos de referência, e unboxing o inverso desse procedimento. Abaixo terá uma ilustração de boxing e unboxing. A primeira conversão passamos de um int para uma tipo object realizando um cast, e a segunda o inverso.


Mais uma vez espero ter ajudado, matéria simples e abordado superficialmente, porém, de grande importância. Vale a pena estudá-la. Fiquem à vontade para comentar e corrigir. Abraços a todos, até a próxima!





quinta-feira, 11 de outubro de 2012

Framework Fundamentals (Generics)

Generics é a forma de trabalharmos com coleções fortemente tipadas. Em versões anteriores ao Framework 2.0, uma generalização era realizada pela conversão de tipos tendo como base o tipo geral System.Object. A coleção ArrayList pode ser usada sem modificação  para armazenar qualquer tipo de referência ou valor. Porém qualquer tipo de referência ou de valor realiza uma conversão por trás pelo typecast para o tipo System.Object. Se for tipo de valor sofrerá boxing e unboxing quando recuperado. Consequentemente comprometem com o desempenho do software. Para tratarmos esse tipo de problema, entramos com o conceito de Generics que nos dá mais eficiência nos eventos e segurança permitindo passarmos um tipo de parametro tipicando tal coleção. Abaixo mostrei via código o uso de Genérics.

O código abaixo cria duas classes sendo a segunda genérica. Elas processarão da mesma forma, salvo a segunda classe que pode receber qualquer tipo de dado sem a  necessidade de realizar boxing e unboxing.


Aqui criamos dois exemplos para passarmos os valores para as classes. No primeiro exemplo não veremos o uma diferença, porém o método genérico será mais rápido devido a forma tipada que a coleçao está demonstrando. O segundo exemplo onde usei as mesmas classes, mas passei valores numéricos, irá acontecer um erro, pois o cast realizado em "(int)objNaoGenerico2.nome" pois realiza um cast para tipo int e não para double. Infelizmente o compildor não pegará o erro. Então, em C#, uma exceção é lançada em tempo de execução.



Espero ter contribuído de alguma forma. Comentem, corrija, vamos compartilhar conhecimentos desse mundo gigantesco que é o universo de desenvolvimento de software.

Abraços.