Série C# – Fundamentos

11 11 2008

Criando um Generic Type

class Gen<T, U>

{

public T t;

public U u;

public Gen(T _t, U _u)

{

t = _t;

u = _u;

}

}

Como você pode ver a classe Gen possui dois membros do tipo T e U. O tipo dos membros T e U será determinado quando o código for consumido. Dependendo de como a classe Gen for consumida, T e U poderá ser uma string, um int, uma custom class, etc.

Consumindo um Generic Type

//Adiciona duas strings usando a classe Gen

Gen<string, string> ga = new Gen<string, string>(“Hello, “, “World!”);
Console.WriteLine(ga.t + ga.u);

//Adiciona um double e um int usando a classe Gen

Gen<double, int> gb = new Gen<double, int>(10.125, 2005);
Console.WriteLine(gb.t + gb.u);

Conclusão

Usar Generic Type ao invés de um tipo Object como era feito antes do framework 2.0 é mais rápido porque não requer boxing e unboxing. Segundo, se houver erros em seu código eles serão identificados em compile time, porque os tipos dos membros já serão conhecidos.

Anúncios




Série C# – Fundamentos

18 10 2008

Conversion, Boxing e Unboxing

No C# podemos fazer conversões implícitas se o tipo de destino puder “acomodar” todo o valor do tipo de origem. Isso é chamado de “widening conversion”.

Exemplo:

int i = 1;
double d = 1.0009;
d = i;  //Conversão permitida

Se o range ou precisão do tipo de origem exceder o do tipo de destino a operação é chamada de “narrowing conversion”, que normalmente requer uma conversão explicita.

“Narrowing conversions” falha se o valor de origem exceder o range do tipo de destino ou se a conversão entre os tipos não for definida, entao você deve colocar “Narrowing conversions” dentro de blocos Try ou usar o TryParse e checar o valor de retorno

Boxing e Unboxing

Boxing converte um value type para um reference type e unboxing converte um reference type para um value type. O exemplo abaixo mostra com fazer um boxing convertendo um Integer(value type) para um Object(reference type):

int i = 123;
object o = (object) i;

Unboxing ocorre quando você converte um objeto reference para um value type.

Exemplo:

object o = 123;
int i = (int) o;