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
eStatic
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
eOptional
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
- Procedimentos
- Como definir várias versões de um procedimento
- Como chamar um procedimento sobrecarregado
- Como sobrecarregar um procedimento que usa parâmetros opcionais
- Como sobrecarregar um procedimento que usa um número indefinido de parâmetros
- Considerações sobre procedimentos de sobrecarga
- Resolução de Sobrecarga
- Sobrecargas
- Tipos genéricos no Visual Basic