No mundo da programação vivemos constantemente alterando os tipos de dados para atender necessidades técnicas. Hora convertemos uma data digitada (texto) para seu tipo nativo DateTime, hora convertemos um valor de horas para o seu tipo correspondente, o TimeSpan.
Existem na teoria as conversões implícitas e explicitas, porém existem também as conversões realizadas pelos desenvolvedores, as User-Defined conversions e as conversões com auxílio de classes que proveem conversão de tipos não compatíveis entre si.
Vamos focar apenas nos dois primeiros tipos, por serem os de uso mais comum para todos.
Conversão Implícita
O nome já diz: implícito. Ao declarar esse tipo de conversão, o compilador identifica que ambos são de tipos compatíveis, sendo assim nenhuma intervenção na hora do build é feita e há a garantia que nenhuma informação seja perdida durante a conversão.
A conversão implícita não só vale para as variáveis TypeValue. Objetos que são ReferenceType, são capazes de uma conversão implícita quando são de uma classe derivada ou até mesmo uma interface. Exemplificamos cada caso nas Listagens 1 e 2.
using System;
namespace ConversionTypeSafe
{
class Program
{
static void Main(string[] args)
{
sbyte a = 10;
short b = a;
int c = b;
long d = c;
float e = d;
double f = e;
Console.Write(f);
Console.Read();
}
}
}
namespace ConversionImplicitReferenceType
{
class Humano
{
//Propriedades e Métodos
}
class Feminino : Humano
{
//Propriedades e Métodos
}
class Masculino : Humano
{
//Propriedades e Métodos
}
class Program
{
static void Main(string[] args)
{
Masculino Robson = new Masculino();
Humano humano = Robson;
}
}
}
A Tabela 1 mostra a conversão implícita disponibilizada pela Microsoft, que contém todas as formas implícitas possíveis. Vale ressaltar que esse tipo de conversão deve ser feita de forma cuidadosa, pois a tipos como Int que possuem menos pontos de precisão nos valores armazenados, o que pode acarretar em arredondamentos de valores de forma errônea.
De | Para |
sbyte | short , int, long, float, double, ou decimal |
byte | short , ushort, int, uint, long, ulong, float, double, ou decimal |
short | int , long, float, double, ou decimal |
ushort | int , uint, long, ulong, float, double, ou decimal |
int | long , float, double, ou decimal |
uint | long , ulong, float, double, ou decimal |
long | float , double, ou decimal |
Tendo conhecimento da tabela, veja que ao tentar uma conversão implícita, por exemplo, do tipo ulong para int, o que ocorre é que o interpretador informa que não é possível converter o tipo int para ulong.
Conversão implícita de char para int
Ao fazer a conversão implícita de um valor do tipo char para um valor do tipo int retornamos um valor que corresponde ao código ASCII do valor do tipo char, conforme a Listagem 3.
int codigo = 'X'; // conversão implícita do valor do tipo char "X"
// para o tipo inteiro que corresponde a seu código ASCII
Console.WriteLine(codigo);
// será exibido o valor 88, codigo ASCII para o caractere "X"
Conversão implícita de inteiros em expressões
Quando temos uma expressão com uma divisão entre dois números inteiros o resultado será outro número inteiro, conforme a Listagem 4.
var x = 15 / 2; // o resultado desta divisão entre os números inteiro 15 e 2
// será o número inteiro 7
var x = 15 / 2.0; // o número ineiro 15 é convertido implicitamente
//para o mesmo tipo double do número 2.0
// e o valor de x é 7.5 do tipo double
Conversão implícita com var
Quando utilizamos a palavra var ao declarar uma variável conforme a Listagem 6 fazemos uma conversão implícita em que o compilador determina o tipo de dado de acordo com o valor atribuído a variável.
var x = 5; // x é convertido implicitamente para o tipo int
var y = 5.0; // y é convertido implicitamente para o tipo double
Conversão Explicita
Essa conversão deixa o código mais legível. A forma de se declarar uma conversão desse tipo facilita no entendimento da necessidade.
Para realizar este tipo, você deve declarar à frente da variável da direita e entre parênteses o tipo de dado que deseja.
Facilitando, seguem os exemplos nas Listagens 7 e 8.
using System;
namespace ConversionExplicit
{
class Program
{
static void Main(string[] args)
{
sbyte a = 10;
short b = (short)a;
int c = (int)b;
long d = (long)c;
float e = (long)d;
double f = (float)e;
Console.Write(f);
Console.Read();
}
}
}
namespace ConversionExplicitRefenceType
{
class Humano
{
//Propriedades e Métodos
}
class Feminino : Humano
{
//Propriedades e Métodos
}
class Masculino : Humano
{
//Propriedades e Métodos
}
class Program
{
static void Main(string[] args)
{
Feminino Mulher = new Feminino();
Humano SerHumano = Mulher;
Feminino OutraMulher = (Feminino)SerHumano;
}
}
}
Existe também uma tabela de equivalências para o tipo explicito, conforme a Tabela 2.
De | Para |
sbyte | byte , ushort, uint, ulong, ou char |
byte | Sbyte ou char |
short | sbyte , byte, ushort, uint, ulong, ou char |
ushort | sbyte , byte, short, ou char |
int | sbyte , byte, short, ushort, uint, ulong, ou char |
uint | sbyte , byte, short, ushort, int, ou char |
long | sbyte , byte, short, ushort, int, uint, ulong, ou char |
Existe uma variante da conversão explicita que utiliza a palavra chave as. Ele realiza apenas conversões de referências compatíveis ou tipos null. Quando uma conversão desse tipo não é possível, ele retorna null para o objeto.
Veja um exemplo na Listagem 9.
namespace ConversionExplicitRefenceType
{
class Humano
{
//Propriedades e Métodos
}
class Feminino : Humano
{
//Propriedades e Métodos
}
class Masculino : Humano
{
//Propriedades e Métodos
}
class Program
{
static void Main(string[] args)
{
Feminino Mulher = new Feminino();
Humano SerHumano = Mulher;
Feminino OutraMulher = SerHumano as Feminino;
}
}
}
Caso o objeto SerHumano seja null ou não seja do tipo Feminino, o as retorna o valor null para o objeto da esquerda.
Conclusão
Os tipos de conversão passados aqui são ações que com o tempo se tornam naturais, mas são primordiais para boas práticas.
Não deixem de pesquisar mais sobre os pontos flutuantes de cada tipo de dado, principalmente quando forem trabalhar com maior precisão nos valores decimais.
Assista aos cursos de .NET da DevMedia.
Referências
Confira outros conteúdos:
Teste unitário com NUnit
Como migrar projetos do ASP.NET MVC...
Crie relatórios com o Stimulsoft...
Promoção de Natal
Oferta exclusiva de Natal!
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 59,90
Total: R$ 718,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 59,90 /mês
Total: R$ 718,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.