Diferenças entre Overload e Override com c#

0

Existem inúmeras maneiras de realizar a mesma coisa quando se trata de programação, e navegando no stackoverflow me deparei com uma questão que me instigou a escrever este artigo. Hoje iremos ver a diferença entre a sobrecarga de método e a substituição de método (Override e Overload) pois a diferença entre eles é um conceito importante para se termos em mente.

Assim, vamos primeiro entender. O que é sobrecarga de método (overload)

Utilizar a sobrecarga nos permite criar mais de um método ou função que tem o mesmo nome, mas assinaturas ou parâmetros diferentes na mesma classe. Isto é chamado de sobrecarga de método. Veja alguns pontos importantes

  1. A sobrecarga de método também é chamada de polimorfismo de ligação antecipada ou ligação estática ( early binding polymorphism or static binding ).
  2. O compilador chama automaticamente o método ou a função necessária, verificando o número de parâmetros e seu tipo, que são passados ​​para esse método.
  3. Se o número de parâmetros e tipo não corresponder a nenhuma assinatura de método, ocorrerá o erro de tempo de compilação.
  4. Podemos obter sobrecarga de método alterando o número de parâmetros usados ​​ou usando diferentes tipos de parâmetros ou alterando a ordem dos parâmetros.
  5. Com isto o compilador se encarrega de verificar a existência e coerência de diferentes métodos com o mesmo nome, alterando apenas a quantidade ou tipos de parâmetros necessários.


//Overloading
public class teste
{
    public void obtemInfo(int id)
    {
        //método 1
    }
    public void obtemInfo(string nome)
    {
        //método 2
    }
    
    public void obtemInfo(string nome, bool ativo)
    {
        //método 3
    }
}


Agora que vimos overload, vamos ver O que é substituição de método (override)

Com o override, podemos criar um método em uma classe derivada com a mesma assinatura e mesmo nome que um método na classe base. Isto é chamado de substituição de método ou ainda ter dois métodos com o mesmo nome e a mesma assinatura, um método na classe base e outro na classe derivada. Veja alguns pontos importantes:

  1. A substituição de método também é chamada de polimorfismo em tempo de execução ou ligação tardia (dynamic polymorphism or late binding).
  2. Podemos substituir um método na classe base, criando função semelhante na classe derivada. Isso pode ser alcançado usando herança e usando virtual & override.
  3. Falar que o método possui a mesma assinatura que o outro significa que os métodos devem ter o mesmo nome, o mesmo número de argumentos e o mesmo tipo de argumento.
  4. A substituição de método é possível apenas nas classes derivadas, mas não dentro da mesma classe por isto temos Overload ou Shadowing (que iremos ver em outro post).
  5. Quando a classe derivada precisa de um método com a mesma assinatura da classe base, mas deseja executar um código diferente daquele fornecido pela classe base, a substituição do método será usada.


 
 //Overriding
public class teste
{
        public virtual void obtemInfo(int id)
        {
            //Obtem info padrão
        }
}

public class teste2 : teste
{
        public override void obtemInfo(int id)
        {
            //base.obtemInfo(id);
            //ou - Obtem info em uma nova implementação
        }
}

Comparação entre sobrecarga de método e substituição de método.

# Overload Override
1 Criação de mais de um método ou função com o mesmo nome, mas com assinaturas ou parâmetros diferentes na mesma classe Criação de um método na classe derivada com a mesma assinatura que um método na classe base.
2) É chamado de polimorfismo em tempo de compilação É chamado polimorfismo de tempo de execução
3) Ele tem o mesmo nome de método, mas com assinaturas ou parâmetros diferentes Ele deve ter o mesmo nome do método, bem como as assinaturas ou os parâmetros.
4) Sobrecarga de método não precisa de herança A substituição de método precisa de herança
5) Sobrecarga de método é possível apenas em classe única A substituição do método precisa do nível hierárquico das classes, ou seja, uma classe pai e outra classe filho.
6 O modificador de acesso pode ser qualquer um. O modificador de acesso deve ser público.
7) A sobrecarga de método também é chamada de ligação antecipada. A substituição de método também é chamada de ligação tardia.


Ou seja, a diferença de overload ou override varia muito em como você escreve o seu código, principalmente se você precisa de um método compartilhado com os mesmos paramêtros ou não. Espero que tenha ficado claro este assunto que é super utilizado no dia-a-dia de um programador.

Um abraço 🙂

Fontes: https://stackoverflow.com/questions/673721/overloading-and-overriding

Compartilhe.

Sobre o autor

Criador do blog Código Simples e com mais 9 anos de experiência em TI, com títulos de MVP Microsoft na área de Visual Studio Development, Neo4j Top 50 Certificate, Scrum Master e MongoDB Evangelist. Atuando em funções analista, desenvolvedor, arquiteto, líder técnico e gestor de equipes. Mais informações em : http://jhonathansoares.com