Introdução
Hoje você aprenderá sobre sobrecarga de métodos que está sendo muito utilizado, porém não pela maioria dos programadores devido à falta de conhecimento do programador sobre este assunto. Por isso resolvi escrever este artigo, principalmente também devido aos pedidos por e-mail, na qual agradeço muito, com pedidos para que eu escrevesse sobre este assunto muito importante na programação.
A sobrecarga de métodos permite a redefinição de métodos usados no C# para utilização com tipos definidos pelo usuário. Podemos dizer que o método sobrecarregado é simplesmente um outro meio de chamar um método.
Muito se ouviu falar que a sobrecarga de métodos não acrescentava e não significava nada para linguagens de programação, porém o conceito sobre este método vem mudando cada vez mais. A sobrecarga de métodos é um recurso poderoso que permite muita flexibilidade no processo de desenvolvimento.
Alguns dos benefícios que podemos citar quanto à sobrecarga de métodos é que o código é muito natural, além disso, os usuários são isentos de ter de tentar criar métodos com as mesmas funções, mas com outros nomes para ter que diferencia-los de alguma forma, piorando substancialmente a portabilidade e legabilidade do software. E isso significa muito, a sobrecarga de métodos ajuda a termos um software mais barato e na própria criação do software também.
Interpretação do Compilador
O C# permite que nós tenhamos vários métodos com o mesmo nome dentro de uma mesma classe, mas desde que estes métodos tenham diferentes conjuntos de parâmetros, sejam eles números, simplesmente a ordem dos parâmetros ou então tipos diferentes.
O compilador trata um método sobrecarregado, quando este método for chamado, da seguinte maneira: primeiramente o compilador selecionará o método correto examinando o numero, em seguida os tipos e por fim a ordem dos argumentos da chamada.
Portanto a sobrecarga de métodos é usada quando se quer criar vários métodos com funções parecidas, ou até mesmo igual, mas que tenham diferentes tipos de dados. Assim faz-se extremamente necessário o uso de sobrecarga de métodos, melhorando em mais de 47% a leitura e entendimento do código, assunto muito importante em empresas de grande porte e aplicações grandes, tornando os programas mais legíveis e compreensíveis por parte dos programadores.
Exemplo
Para melhorar a compreensão do leitor vamos dar um exemplo de sobrecarga de métodos.
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication3
{
class Program
{
public static int Quadrado(int x)
{
return x * x;
}
public static double Quadrado(double y)
{
return y * y;
}
static void Main(string[] args)
{
System.Console.WriteLine("Digite um numero inteiro e depois
um numero de ponto flutuante:");
int x; double y;
string num1, num2;
num1 = System.Console.ReadLine();
num2 = System.Console.ReadLine();
x = Int32.Parse(num1);
y = Double.Parse(num2);
x = Quadrado(x);
y = Quadrado(y);
System.Console.WriteLine("O quadrado da função int é {0}: ",
x);
System.Console.WriteLine("O quadrado da função double é {0}:
", y);
System.Console.ReadLine();
}
}
}
Repare no exemplo acima como o compilador diferencia os metodos sobrecarregados por suas assinaturas, que é uma combinação de seus nomes e dos tipos de parametros do metodo. Imagine se o compilador examinasse apenas o nome dos metodos, seria impossivel usarmos a sobrecarga de metodos. O compilador simplesmente não saberia a diferença entre os dois metodos Quadrado no exemplo acima e assim poderia gerar um erro em tempo de execução embaralhando ambos gerando uma saida inesperada ou então o compilador iria reclamar um erro de sintaxe admitindo que teria dois metodos com o mesmo nome, como ocorre em compilador da linguagem de programação Pascal por exemplo.
Podemos citar como outro exemplo também se o metodo Quadrado fosse declarado como:
void Quadrado(int a, float b)
O compilador agora analisaria os parametros e não mais o tipo de retorno se a sobrecarga do metodo Quadrado fosse:
void Quadrado(float a, int b)
Dessa forma ele consideraria difente ambos os metodos, podemos notar que a ordem dos parametros é muito importante na sobrecarga de metodos, portanto cuidado!
Mas e se tivessemos dois metodos Quadrados como no exemplo abaixo:
void Quadrado(int a, float b)
double Quadrado(int soma, float multiplicacao)
Assim o compilador não teria como diferenciar os metodos sobrecarregados e geraria um erro, pois não temos nada de diferente nos parametros, assim o programa não poderia compilar. É um grande erro pensar que apenas diferenciar o tipo de retorno de uma função fará com que poderemos sobrecarregar uma função, fique atento que muitos caem nesse tipo de coisa.
Conclusão
Como podemos ver no artigo a sobrecarga de métodos representa uma boa parcela de contribuição na orientação a objetos hoje, por isso a devida importância de se saber esse importante item que vem agregado na maioria das linguagens de programação dos dias atuais.
Qualquer duvida me contatem por e-mail higorowen@gmail.com que estarei respondendo a todas as duvidas e aceitando futuras sugestões de artigos.