Ferramentas de Utilizador

Ferramentas de Site


dev_net:vb.net:overloads

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

Introdução

Muitas vezes, após criação de um método na nossa classe, deparamos-nos com a necessidade de criar um outro método práticamente 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
Também é possível fazer "Overload" a funções

O que mudou?

Exprimente agora chamar o método e verificará que a "tooltip" apresenta no fim o texto: "(+3 overloads)". Assim que abrir os parenteses 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á automáticamente atribuído.

Os sumários de método são a forma ideal para oferecer mais distinção aos métodos "overloaded"
dev_net/vb.net/overloads.txt · Esta página foi modificada pela última vez em: 2018/05/14 21:37 (Edição externa)