Médio C#
Método com `out` e sobrecarga
Enunciado
Crie um método Calcular sobrecarregado: uma versão recebe dois int e retorna a soma; outra recebe dois double e retorna a média. Além disso, crie um método TentarConverter que recebe uma string e usa out int para retornar se a conversão foi bem-sucedida e o valor convertido. No Main, teste as sobrecargas e o out.
Requisitos
- Método
Calcular(int a, int b)retorna a soma dos dois inteiros. - Método
Calcular(double a, double b)retorna a média dos dois doubles. - Método
TentarConverter(string texto, out int numero)retornatruese a conversão for bem-sucedida; caso contrário,falseenumero = 0. - No
Main, chame as duas sobrecargas e o métodoTentarConvertercom um valor válido e um inválido, imprimindo os resultados.
Código inicial
using System;
class Program
{
// TODO: implementar Calcular(int, int)
// TODO: implementar Calcular(double, double)
// TODO: implementar TentarConverter(string, out int)
static void Main()
{
// TODO: testar as sobrecargas e o out
}
}
Saída esperada
Soma: 7
Média: 4
Conversão de '123': 123
Conversão de 'abc': falhou
Ver dica
Para TentarConverter, use int.TryParse internamente ou faça a lógica manual com int.TryParse. Lembre-se de atribuir numero antes de retornar.
Mostrar solução
using System;
class Program
{
// Sobrecarga 1: soma de inteiros
static int Calcular(int a, int b) => a + b;
// Sobrecarga 2: média de doubles
static double Calcular(double a, double b) => (a + b) / 2.0;
// Método com parâmetro out: tenta converter string para int
static bool TentarConverter(string texto, out int numero)
{
// Tenta converter; se falhar, atribui 0 e retorna false
return int.TryParse(texto, out numero);
}
static void Main()
{
// Chama a sobrecarga de int
Console.WriteLine($"Soma: {Calcular(3, 4)}"); // 7
// Chama a sobrecarga de double
Console.WriteLine($"Média: {Calcular(3.0, 5.0)}"); // 4
// Testa conversão bem-sucedida
if (TentarConverter("123", out int valor))
Console.WriteLine($"Conversão de '123': {valor}");
// Testa conversão que falha
if (!TentarConverter("abc", out int _))
Console.WriteLine("Conversão de 'abc': falhou");
}
}
Passo a passo
- Definimos duas sobrecargas de
Calcular: uma parainte outra paradouble. - A versão
intretorna a soma; a versãodoubleretorna a média. - O método
TentarConverterusaint.TryParse, que já fornece o padrãooute retornabool. - No
Main, chamamosCalcular(3, 4)eCalcular(3.0, 5.0); o compilador escolhe a sobrecarga correta pelos tipos dos argumentos. - Para o
out, chamamosTentarConverter("123", out int valor)e usamos o valor convertido. - Na segunda chamada, usamos
out int _para descartar o valor, já que só queremos testar o retorno.
Por que funciona
A sobrecarga permite o mesmo nome para operações semelhantes, mas com tipos diferentes. O método com out é útil quando precisamos retornar mais de uma informação: o sucesso da operação e o valor convertido. int.TryParse já implementa esse padrão, então podemos delegar a ele.
Erros comuns
- Não atribuir o parâmetro
out: seTentarConverternão atribuirnumeroem todos os caminhos, o compilador gera erro CS0177. Useint.TryParseque sempre atribui. - Chamar a sobrecarga errada:
Calcular(3, 4.0)não compila porque não há sobrecarga(int, double). Converta explicitamente ou crie a sobrecarga. - Esquecer
outna chamada:TentarConverter("123", valor)não compila; é obrigatóriooutantes da variável.
Outra forma de resolver
Poderia usar int.Parse dentro de um try/catch, mas TryParse é mais eficiente e idiomático para tentativas de conversão.
Saída esperada
Soma: 7
Média: 4
Conversão de '123': 123
Conversão de 'abc': falhou