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, preparei um exemplo didático para apresentar esse recurso a quem ainda não o conhece.
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.
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 a seguir:
Temperature marsTemperature = new Temperature { Celsius = -63.0m };
decimal celsius = (decimal)marsTemperature; // Cast
Console.WriteLine($"Temperature: {celsius}ºC");
// OUTPUT: Temperature: -63.0ºC
Acabamos de instruir o compilador sobre como tratar uma conversão explícita de uma instância de Temperature para o tipo decimal. É um recurso útil.
Agora, vamos aos operadores implícitos.
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.
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.
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!
Me siga para mais conteúdos como este.
Obrigado pela leitura.


Top comments (0)