Skip to content Skip to sidebar Skip to footer

Operadores de Conversão Explícitos e Implícitos Customizados em .NET C#

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");
    }
}

Leave a comment