Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Sobrecarga de Métodos | Essenciais de Poo
C# Além do Básico

bookSobrecarga 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

index.cs

copy
12345678910111213141516171819
using 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

index.cs

copy
12345678910
static 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

index.cs

copy
123
sum(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

index.cs

copy
12345678910
static 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

index.cs

copy
1234567891011121314151617181920212223242526
using 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?

question mark

Como o compilador diferencia entre métodos sobrecarregados?

Select the correct answer

question mark

Qual das alternativas a seguir é um exemplo válido de sobrecarga de métodos?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 7

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Suggested prompts:

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

bookSobrecarga 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

index.cs

copy
12345678910111213141516171819
using 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

index.cs

copy
12345678910
static 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

index.cs

copy
123
sum(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

index.cs

copy
12345678910
static 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

index.cs

copy
1234567891011121314151617181920212223242526
using 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?

question mark

Como o compilador diferencia entre métodos sobrecarregados?

Select the correct answer

question mark

Qual das alternativas a seguir é um exemplo válido de sobrecarga de métodos?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 7
some-alt