Sobrecarga de Métodos
A sobrecarga de métodos em C# permite definir vários métodos com o mesmo nome em uma classe, cada um diferindo nos tipos de parâmetros, na quantidade de parâmetros ou em ambos, proporcionando uma maneira mais limpa e adaptável de lidar com diferentes cenários de entrada.
Por exemplo, é possível ter dois métodos com o mesmo nome, mas com quantidades diferentes de parâmetros:
index.cs
12345678910111213141516171819using System; class ConsoleApp { static int sum(int a, int b) { return a + b; } static int sum(int a, int b, int c) { return a + b + c; } static void Main() { Console.WriteLine(sum(5, 7)); Console.WriteLine(sum(5, 7, 9)); } }
No código acima, o método sum
foi sobrecarregado para ter duas variações de parâmetros. Um método também pode ter diferentes tipos de retorno para suas variações; no entanto, é importante que não haja ambiguidade, caso contrário, o compilador exibirá um erro, pois a principal forma de o compilador distinguir entre dois métodos com o mesmo nome é pela lista de parâmetros.
Por exemplo:
index.cs
12345678910static int sum(int a, int b) { return a + b; } // This is wrong and will show an error static long sum(int a, int b) { return a + b; }
O código acima está incorreto porque os parâmetros são exatamente os mesmos do método original, enquanto o tipo de retorno é diferente. Isso não é permitido, pois torna impossível para o compilador (ou até mesmo para humanos) escolher qual método executar quando ele é chamado:
index.cs
123sum(1, 3); // Should it execute `int sum(int a, int b)` or `long sum(int a, int b)` ? // It is impossible to reach a good answer for the compiler in this case so it shows an error
Por isso, ao sobrecarregar um método, um método que possui um tipo de retorno diferente também deve ter um conjunto diferente de parâmetros para torná-lo distinguível e remover ambiguidades. O seguinte também está incorreto:
index.cs
12345678910static int sum(int a, int b) { return a + b; } // This is wrong and will show an error static long sum(int first, int second) { return first + second; }
Isso ocorre porque os nomes dos parâmetros não importam, mas seus tipos sim. Os seguintes casos de sobrecarga são válidos:
index.cs
1234567891011121314151617181920212223242526using System; class ConsoleApp { static int sum(int a, int b) { return a + b; } static long sum(long a, long b) { return a + b; } static string sum(int a, long b, float c) { return Convert.ToString(a + b + c); } static void Main() { Console.WriteLine(sum(5, 7)); // Calls 'int sum()' Console.WriteLine(sum(500000000000, 700000000000)); // Calls 'long sum()' Console.WriteLine(sum(5, 7, 9)); // Calls 'string sum()' } }
1. Como o compilador diferencia entre métodos sobrecarregados?
2. Qual das alternativas a seguir é um exemplo válido de sobrecarga de métodos?
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Can you give more examples of valid method overloading in C#?
What are some common mistakes to avoid when overloading methods?
Can you explain how method overloading differs from method overriding?
Awesome!
Completion rate improved to 2.04
Sobrecarga de Métodos
Deslize para mostrar o menu
A sobrecarga de métodos em C# permite definir vários métodos com o mesmo nome em uma classe, cada um diferindo nos tipos de parâmetros, na quantidade de parâmetros ou em ambos, proporcionando uma maneira mais limpa e adaptável de lidar com diferentes cenários de entrada.
Por exemplo, é possível ter dois métodos com o mesmo nome, mas com quantidades diferentes de parâmetros:
index.cs
12345678910111213141516171819using System; class ConsoleApp { static int sum(int a, int b) { return a + b; } static int sum(int a, int b, int c) { return a + b + c; } static void Main() { Console.WriteLine(sum(5, 7)); Console.WriteLine(sum(5, 7, 9)); } }
No código acima, o método sum
foi sobrecarregado para ter duas variações de parâmetros. Um método também pode ter diferentes tipos de retorno para suas variações; no entanto, é importante que não haja ambiguidade, caso contrário, o compilador exibirá um erro, pois a principal forma de o compilador distinguir entre dois métodos com o mesmo nome é pela lista de parâmetros.
Por exemplo:
index.cs
12345678910static int sum(int a, int b) { return a + b; } // This is wrong and will show an error static long sum(int a, int b) { return a + b; }
O código acima está incorreto porque os parâmetros são exatamente os mesmos do método original, enquanto o tipo de retorno é diferente. Isso não é permitido, pois torna impossível para o compilador (ou até mesmo para humanos) escolher qual método executar quando ele é chamado:
index.cs
123sum(1, 3); // Should it execute `int sum(int a, int b)` or `long sum(int a, int b)` ? // It is impossible to reach a good answer for the compiler in this case so it shows an error
Por isso, ao sobrecarregar um método, um método que possui um tipo de retorno diferente também deve ter um conjunto diferente de parâmetros para torná-lo distinguível e remover ambiguidades. O seguinte também está incorreto:
index.cs
12345678910static int sum(int a, int b) { return a + b; } // This is wrong and will show an error static long sum(int first, int second) { return first + second; }
Isso ocorre porque os nomes dos parâmetros não importam, mas seus tipos sim. Os seguintes casos de sobrecarga são válidos:
index.cs
1234567891011121314151617181920212223242526using System; class ConsoleApp { static int sum(int a, int b) { return a + b; } static long sum(long a, long b) { return a + b; } static string sum(int a, long b, float c) { return Convert.ToString(a + b + c); } static void Main() { Console.WriteLine(sum(5, 7)); // Calls 'int sum()' Console.WriteLine(sum(500000000000, 700000000000)); // Calls 'long sum()' Console.WriteLine(sum(5, 7, 9)); // Calls 'string sum()' } }
1. Como o compilador diferencia entre métodos sobrecarregados?
2. Qual das alternativas a seguir é um exemplo válido de sobrecarga de métodos?
Obrigado pelo seu feedback!