Novidades do C# 11: Generic Math
A implementação em C# de cálculos matemáticos a partir de estruturas como métodos costuma se basear em um tipo numérico específico, com parâmetros e resultados sendo declarados com base nesta escolha. A eventual necessidade de suportar outros tipos levaria a sobrecargas de um método inicial e, muito provavelmente, envolveria duplicação de linhas de código.
O C# 11 oferece uma solução a este tipo de limitação, através de um conjunto de novos recursos que recebeu o nome de Generic Math. Essas novas funcionalidades estão agrupadas no namespace System.Numerics.
A classe SaldoBancario traz um exemplo de implementação baseada em Generic Math:
- O método genérico CalcularConsolidado referencia o tipo T, o qual se baseia na interface genérica INumber. Esta operação será usada para calcular entradas e saídas de uma conta bancária;
- Com INumber podemos utilizar diferentes tipos numéricos ao acionar o método CalcularConsolidado, tais como int, double, decimal e char (apenas para citar algumas das possibilidades).
Na próxima listagem temos exemplos de uso do método CalcularConsolidado:
- Foram realizados cálculos com os tipos double (linhas 13 e 14) e decimal (linhas 22 e 23);
- Com a utilização de Generic Math obtemos um maior reaproveitamento de código, evitando com isto a necessidade de implementações para cada tipo numérico previsto.
A imagem seguinte traz o resultado da execução deste código a partir do Visual Studio 2022:
Esse exemplo também está disponível no GitHub:
https://github.com/renatogroffe/CSharp11-GenericMath
Caso achem útil esta solução, peço por favor um ⭐️ no repositório apoiando. Fica também o convite para que vocês me sigam lá no GitHub!
Outras novidades do C# 11 foram demonstradas em 2 lives recentes no Canal .NET: