Compartilhar via


Sobrecarga de procedimento (Visual Basic)

Sobrecarregar um procedimento significa defini-lo em várias versões, usando o mesmo nome, mas listas de parâmetros diferentes. A finalidade da sobrecarga é definir várias versões intimamente relacionadas de um procedimento sem precisar diferenciá-las pelo nome. Você faz isso variando a lista de parâmetros.

Regras de Sobrecarga

Quando você sobrecarrega um procedimento, as seguintes regras se aplicam:

  • Mesmo Nome. Cada versão sobrecarregada precisa usar o mesmo nome de procedimento.

  • Assinatura Diferente. Cada versão sobrecarregada precisa ser diferente de todas as outras versões sobrecarregadas em pelo menos um dos seguintes aspectos:

    • Número de parâmetros

    • Ordem dos parâmetros

    • Tipos de dados dos parâmetros

    • Número de parâmetros de tipo (para um procedimento genérico)

    • Tipo de retorno (somente para um operador de conversão)

    Juntamente com o nome do procedimento, os itens anteriores são chamados coletivamente de assinatura do procedimento. Quando você chama um procedimento sobrecarregado, o compilador usa a assinatura para verificar se a chamada corresponde corretamente à definição.

  • Itens que não Fazem Parte da Assinatura. Você não pode sobrecarregar um procedimento sem variar a assinatura. Em particular, você não pode sobrecarregar um procedimento variando apenas um ou mais dos seguintes itens:

    • Palavras-chave do modificador de procedimento, como Public, Shared e Static

    • Nomes do parâmetro ou do parâmetro de tipo

    • Restrições de parâmetro de tipo (para um procedimento genérico)

    • Palavras-chave do modificador de parâmetro, como ByRef e Optional

    • Se ele retorna um valor

    • O tipo de dados do valor retornado (exceto para um operador de conversão)

    Os itens na lista anterior não fazem parte da assinatura. Embora você não possa usá-las para diferenciar entre versões sobrecarregadas, você pode variá-las entre versões sobrecarregadas que são adequadamente diferenciadas pelas assinaturas.

  • Argumento de Associação Tardia. Se você pretende passar uma variável de objeto com limite tardio para uma versão sobrecarregada, deve declarar o parâmetro apropriado como Object.

Várias Versões de um Procedimento

Suponha que você esteja escrevendo um procedimento Sub para postar uma transação em relação ao saldo de um cliente e queira ser capaz de consultar o cliente pelo nome ou pelo número da conta. Para acomodar isso, você pode definir dois procedimentos Sub diferentes, como no seguinte exemplo:

Sub postName(ByVal custName As String, ByVal amount As Single)
    ' Insert code to access customer record by customer name.
End Sub
Sub postAcct(ByVal custAcct As Integer, ByVal amount As Single)
    ' Insert code to access customer record by account number.
End Sub

Versões Sobrecarregadas

Uma alternativa é sobrecarregar um único nome de procedimento. Você pode usar a palavra-chave Sobrecargas para definir uma versão do procedimento para cada lista de parâmetros, da seguinte maneira:

Overloads Sub post(ByVal custName As String, ByVal amount As Single)
    ' Insert code to access customer record by customer name.
End Sub
Overloads Sub post(ByVal custAcct As Integer, ByVal amount As Single)
    ' Insert code to access customer record by account number.
End Sub

Sobrecargas Adicionais

Se você também quiser aceitar um valor de transação em um Decimal ou Single, poderá sobrecarregar post ainda mais para permitir essa variação. Se você fizesse isso com cada uma das sobrecargas no exemplo anterior, teria quatro procedimentos Sub, todos com o mesmo nome, mas com quatro assinaturas diferentes.

Vantagens da Sobrecarga

A vantagem de sobrecarregar um procedimento está na flexibilidade da chamada. Para usar o procedimento post declarado no exemplo anterior, o código de chamada pode obter a identificação do cliente como um String ou um Integer e, em seguida, chamar o mesmo procedimento em ambos os casos. O exemplo a seguir ilustra isso:

Imports MSVB = Microsoft.VisualBasic
Dim customer As String
Dim accountNum As Integer
Dim amount As Single
customer = MSVB.Interaction.InputBox("Enter customer name or number")
amount = MSVB.Interaction.InputBox("Enter transaction amount")
Try
    accountNum = CInt(customer)
    Call post(accountNum, amount)
Catch
    Call post(customer, amount)
End Try

Confira também