terça-feira, 27 de fevereiro de 2007

Conhecendo C# - Tipos - Parte 4

Conhecendo C# - Tipos - Parte 4

Conversões Explícitas

Quando uma variável pode ser mais de 1 tipo, o recurso de cast poderá ser utilizado para decidir ou transformar para o tipo desejado.

Cast é uma operação que “extrai” o valor de um determinado tipo para outro, podendo ser resolvido em tempo de compilação ou tempo de execução. O valor obtido é uma representação do valor original, que permanece intacto nessa operação. Este recurso é muito comum em C#, principalmente em técnicas como boxing e unboxing.

//extraindo um valor int de long
nt x;
long y = 10;
x =(int)y;

//extraindo um valor System.Int32 de System.Int64
System.Int32 x;
System.Int64 y = 10;
x = (System.Int32)y;

Nos exemplos acima a operação de cast é efetuada nas últimas linhas, onde extrai-se um valor inteiro(int) de um inteiro longo(long). O que deve ser levado em consideração, tanto para as conversões implícitas quanto para as explícitas, é a faixa de dados, pois o int não comporta o grupo long totalmente(vide Faixa de Dados na tabela 1), porém o inverso é verdadeiro. Se essa faixa “estourar” o valor obtido não será consistente. Porém este tipo de operação é válida e amplamente utilizada. Por exemplo:

class Casts{
public static void Main(){
int x;
long y=10;

//Cast consistente
x=(int)y;
System.Console.WriteLine("Cast consistente int x={0} long y={1}",x,y);

//Cast inconsistente
y=2147483648;
x=(int)y;
System.Console.WriteLine("Cast inconsistente int x={0} long y={1}",x,y);
}
}

Para compilar o exemplo acima, no prompt, digite csc Casts.cs. Execute o programa digitando Casts. A Figura 2, mostra compilação e execução da aplicação em C#.


Figura 2: Compilação e Execução do exemplo Casts

A tabela 3 ajudará no suporte há conversões númericas explícitas.

Tabela
3: Conversões Númericas Explícitas suportadas

De

Para

byte

sbyte ou char
char sbyte, byte ou short
decimal sbyte, byte, short, ushort, int, uint, long, ulong, char, float ou double
double sbyte, byte, short, ushort, int, uint, long, ulong, char, float ou decimal
float sbyte, byte, short, ushort, int, uint, long, ulong, char ou decimal
int sbyte, byte, short, ushort, uint, ulong ou char
Long sbyte, byte, short, ushort, int, uint, ulong ou char
sbyte byte, ushort, uint, ulong ou char
short sbyte, byte, ushort, uint, ulong ou char
uint sbyte, byte, short, ushort, int ou char
ulong sbyte, byte, short, ushort, int, uint, long ou char
ushort sbyte, byte, short ou char


Ir para o índice do Manual.
Próximo artigo:
.

2 comentários:

Marcos disse...

Ola,
isso nao é bem um comentario e sim uma pergunta, estou tentando fazer um codigo onde eu capte do teclado um numero inteiro e depois ele me exiba o caractere ASCII de referencia ao numero digitado.
Sei q tenho q fazer um cast, mais ta fd !
alguem manja ?

using System;
class Caractere
{
static void Main()
{
int recebe;
char aux;

Console.WriteLine("Digite um Numero:");
recebe = Console.ReadLine();
aux = (char)recebe;
Console.WriteLine(aux);
}
}

Att. Marcos Felipe
mhulk@hotmail.com

Erick Almeida disse...

Marcos, oq exatamente está acontecendo?

Neobux