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
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;
}
}
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
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?
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";
}
}
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
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?
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!
Top comments (0)