DEV Community

Cover image for Operadores de Conversão Explícitos e Implícitos Customizados em .NET C#
Thiago Souza
Thiago Souza

Posted on

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

Os operadores de conversão implicit e explicit foram introduzidos na linguagem C# há quase duas décadas. Embora não seja um problema, é provável que muitos programadores nunca tenham tido contato com esse recurso. Por isso, resolvi criar um exemplo didático, no meu estilo, para apresentar esse recurso fantástico a quem ainda não o conhece. Tenho certeza de que será uma adição valiosa ao seu repertório de programação.

Operadores Explícitos

O objetivo principal dos operadores explícitos é proporcionar maior segurança ao realizar conversões críticas ou potencialmente arriscadas, comumente chamadas de cast (ou conversão explícita).

Antes de explicar como customizá-los, preciso mostrar um exemplo para quem ainda não está familiarizado com este tema:

int temperature = 255;

Console.WriteLine((byte)temperature);

// OUTPUT: 255
Enter fullscreen mode Exit fullscreen mode

Neste caso, estamos realizando uma conversão explícita de uma variável do tipo int para byte.

Se alterássemos este exemplo e o valor informado fosse 256, qual seria o resultado? Experimente e depois compartilhe nos comentários.

Agora que estamos familiarizados com o cast, podemos seguir com o nosso exemplo de implementação. Veja o código a seguir:

public class Temperature
{
    public decimal Celsius { get; set; }

    public static explicit operator decimal(Temperature temperature)
    {
        return temperature.Celsius;
    }
}
Enter fullscreen mode Exit fullscreen mode

Além da propriedade Celsius, nossa classe Temperature possui a assinatura e a implementação de um operador de conversão explícita, que recebe uma instância da classe Temperature e retorna o valor da propriedade Celsius (do tipo decimal).

Observe o código (você pode copiar e testar se quiser) e veja a magia acontecer:

Temperature marsTemperature = new Temperature { Celsius = -63.0m };

decimal celsius = (decimal)marsTemperature; // Cast

Console.WriteLine($"Temperature: {celsius}ºC");

// OUTPUT: Temperature: -63.0ºC
Enter fullscreen mode Exit fullscreen mode

Acabamos de ensinar ao compilador o que ele deve fazer caso seja identificada uma conversão explícita de uma instância de Temperature para o tipo decimal. Massa de mais, não é mesmo?

Mind Blowing

Caaalma! Não vá embora ainda, pois agora vamos falar sobre o que considero ser a cereja do bolo...

Operadores Implícitos

O objetivo dos operadores de conversão implícita é, basicamente, melhorar a legibilidade do código. Sendo assim, seu código pode ficar menos verboso e mais transparente, permitindo a realização de conversões de tipos de forma mais segura.

Ainda não acredita em mim? Veja o exemplo a seguir:

public class Temperature
{
    public decimal Celsius { get; set; }

    public static implicit operator Temperature(decimal value)
    {
        return new Temperature { Celsius = value };
    }

    public override string ToString()
    {
        return $"Temperature: {Celsius}ºC";
    }
}
Enter fullscreen mode Exit fullscreen mode

Novamente, além da propriedade Celsius, nossa classe Temperature possui a assinatura e a implementação de um operador de conversão implícita, que recebe um valor do tipo decimal e retorna uma instância da classe Temperature.

Como podemos observar, também estamos sobrescrevendo o método ToString, apenas para deixar o nosso output mais elegante.

No exemplo de código a seguir, criamos uma variável do tipo Temperature, que será instanciada com o valor em decimal que representa a temperatura média do planeta Terra:

Temperature earthTemperature = 14.5m;

Console.WriteLine(earthTemperature);

// OUTPUT: Temperature: 14.5ºC
Enter fullscreen mode Exit fullscreen mode

Conforme pudemos observar neste exemplo, os operadores de conversão implícita são uma excelente ferramenta para simplificar o código e melhorar a legibilidade, mas devem ser usados com cautela para evitar conversões indesejadas e perda de dados. Combinado?

Nice


Neste artigo, vimos os operadores de conversão explicit e implicit em C# e como eles podem ser utilizados para tornar o código mais seguro e legível.

Se você tem alguma dúvida ou sugestão, sinta-se à vontade para deixar um comentário. Ficarei feliz em tentar ajudar!

Não se esqueça de me seguir para receber mais conteúdos como este. ❤️

Obrigado e até a próxima!

Heroku

Simplify your DevOps and maximize your time.

Since 2007, Heroku has been the go-to platform for developers as it monitors uptime, performance, and infrastructure concerns, allowing you to focus on writing code.

Learn More

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Immerse yourself in a wealth of knowledge with this piece, supported by the inclusive DEV Community—every developer, no matter where they are in their journey, is invited to contribute to our collective wisdom.

A simple “thank you” goes a long way—express your gratitude below in the comments!

Gathering insights enriches our journey on DEV and fortifies our community ties. Did you find this article valuable? Taking a moment to thank the author can have a significant impact.

Okay