Ir para o conteúdo

Overloads - Múltiplos métodos em um só

Introdução

Muitas vezes, após criação de um método na nossa classe, deparamo-nos com a necessidade de criar um outro método praticamente semelhante, apenas com uma ou outra alteração, e damos-lhe outro nome para o identificarmos, construíndo assim uma interminável lista de métodos com diferenças mínimas. Existe uma solução para concentrar estas pequenas diferenças num só método e a solução chama-se "Overload".

O problema

Quando precisamos, por exemplo, de gravar uma imagem proveniente de vários formatos, teríamos de criar um método para cada formato ou até mesmo verificar dentro do método o formato e agir de acordo. Este tipo de prática apenas gera confusão, desarrumação e torna o código bastante feio.

    Private Sub GravarImagem_Caminho(ByVal Fonte As String, ByVal Alvo As String)
        Dim B As Bitmap = New Bitmap(Fonte)
        B.Save(Alvo)
    End Sub

    Private Sub GravarImagem_Bitmap(ByVal BM As Bitmap, ByVal Alvo As String)
        BM.Save(Alvo)
    End Sub

    Private Sub GravarImagem_Icone(ByVal Icone As Drawing.Icon, ByVal Alvo As String)
        Dim B As Bitmap = New Bitmap(Icone.ToBitmap)
        B.Save(Alvo)
    End Sub

    Private Sub GravarImagem_Image(ByVal Image As Drawing.Image, ByVal Alvo As String)
        Dim B As Bitmap = New Bitmap(Image)
        B.Save(Alvo)
    End Sub

A solução

Com diferenças subtis se fazem enormes alterações. Acrescenta-se a chave Overloads antes da constatação Sub, neste caso, e alteram-se as assinaturas (os nomes dos métodos) todas para exactamente o mesmo.

    Private Overloads Sub GravarImagem(ByVal Fonte As String, ByVal Alvo As String)
        Dim B As Bitmap = New Bitmap(Fonte)
        B.Save(Alvo)
    End Sub

    Private Overloads Sub GravarImagem(ByVal BM As Bitmap, ByVal Alvo As String)
        BM.Save(Alvo)
    End Sub

    Private Overloads Sub GravarImagem(ByVal Icone As Drawing.Icon, ByVal Alvo As String)
        Dim B As Bitmap = New Bitmap(Icone.ToBitmap)
        B.Save(Alvo)
    End Sub

    Private Overloads Sub GravarImagem(ByVal Image As Drawing.Image, ByVal Alvo As String)
        Dim B As Bitmap = New Bitmap(Image)
        B.Save(Alvo)
    End Sub

Ideia: Também é possível fazer overload a funções.

O que mudou?

Experimente agora chamar o método e verificará que a "tooltip" apresenta no fim o texto: "(+3 overloads)". Assim que abrir os parênteses para introduzir os argumentos, a caixa de descrição do método aparecerá, e com ela, no seu canto superior esquerdo, duas pequenas setas. Estas setas trocam entre os métodos "overloaded" para escolher o que mais lhe convém. Alternativamente, envie simplesmente os argumentos que o "overload" que corresponder será automaticamente atribuído.

Ideia: Os sumários de método são a forma ideal para oferecer mais distinção aos métodos "overloaded".