Operadores de Conversão Explícitos e Implícitos Customizados em .NET C#
Em C#, os operadores de conversão são indispensáveis em muitas situações, pois permitem a transformação de um tipo de dado em outro. Os operadores de conversão podem ser classificados em explícitos e implícitos, e a personalização deles pode facilitar a manipulação de tipos customizados. Neste artigo, discutiremos como implementar operadores de conversão explícitos e implícitos em suas classes no .NET usando C#.
O que são Operadores de Conversão?
Os operadores de conversão permitem que você converta um tipo em outro, possibilitando a atribuição de um tipo a uma variável de outro tipo sem erros de compilação. Eles são especialmente úteis ao trabalhar com tipos complexos. Em C#, podemos definir dois tipos de operadores de conversão:
- Conversão Implícita: Ocorre sem a necessidade de uma sintaxe explícita. Utiliza-se quando a conversão é segura e não resulta em perda de dados.
- Conversão Explícita: Necessita de sintaxe explícita, geralmente em situações onde a conversão pode levar a uma perda de dados ou não é segura.
Desenvolvendo uma Classe Customizada
Vamos criar um exemplo prático para entender melhor esses operadores. Suponha que temos uma classe chamada Temperatura
, que armazena temperatura em graus Celsius e queremos convertê-la para Fahrenheit.
public class Temperatura
{
public double GrausCelsius { get; private set; }
public Temperatura(double grausCelsius)
{
GrausCelsius = grausCelsius;
}
// Conversão Implícita: Temperatura -> double (Celsius)
public static implicit operator double(Temperatura temperatura)
{
return temperatura.GrausCelsius;
}
// Conversão Explícita: Temperatura -> double (Fahrenheit)
public static explicit operator double(Temperatura temperaturaF)
{
return (temperaturaF.GrausCelsius * 9 / 5) + 32;
}
// Conversão de double (Celsius) para Temperatura
public static explicit operator Temperatura(double grausCelsius)
{
return new Temperatura(grausCelsius);
}
}
Implementando os Operadores de Conversão
Com a classe Temperatura
definida, agora podemos realizar as conversões. Veja como usar os operadores que acabamos de adicionar:
class Program
{
static void Main(string[] args)
{
Temperatura t1 = new Temperatura(25); // Celsius
double celsius = t1; // Conversão implícita
double fahrenheit = (double)t1; // Conversão explícita
Console.WriteLine($"Temperatura em Celsius: {celsius}°C");
Console.WriteLine($"Temperatura em Fahrenheit: {fahrenheit}°F");
// Criando uma Temperatura a partir de Celsius
Temperatura t2 = (Temperatura)30; // Conversão explícita
Console.WriteLine($"Temperatura criada: {t2.GrausCelsius}°C");
}
}