Partilhar via


Propriedades e métodos sobrecarregados (Visual Basic)

Sobrecarga é a criação de mais de um procedimento, construtor de instância ou propriedade em uma classe com o mesmo nome, mas tipos de argumento diferentes.

Sobrecarregando o uso

A sobrecarga é especialmente útil quando o modelo de objeto determina que você empregue nomes idênticos para procedimentos que operam em tipos de dados diferentes. Por exemplo, uma classe que pode exibir vários tipos de dados diferentes pode ter Display procedimentos parecidos com este:

Overloads Sub Display(ByVal theChar As Char)
    ' Add code that displays Char data.
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
    ' Add code that displays Integer data.
End Sub
Overloads Sub Display(ByVal theDouble As Double)
    ' Add code that displays Double data.
End Sub

Sem sobrecarregar, você precisaria criar nomes distintos para cada procedimento, mesmo que eles façam a mesma coisa, como mostrado a seguir:

Sub DisplayChar(ByVal theChar As Char)
    ' Add code that displays Char data.
End Sub
Sub DisplayInt(ByVal theInteger As Integer)
    ' Add code that displays Integer data.
End Sub
Sub DisplayDouble(ByVal theDouble As Double)
    ' Add code that displays Double data.
End Sub

A sobrecarga facilita o uso de propriedades ou métodos porque fornece uma escolha de tipos de dados que podem ser usados. Por exemplo, o método sobrecarregado Display discutido anteriormente pode ser chamado com qualquer uma das seguintes linhas de código:

' Call Display with a literal of type Char.
Display("9"c)
' Call Display with a literal of type Integer.
Display(9)
' Call Display with a literal of type Double.
Display(9.9R)

Em tempo de execução, o Visual Basic chama o procedimento correto com base nos tipos de dados dos parâmetros especificados.

Regras de sobrecarga

Você cria um membro sobrecarregado para uma classe adicionando duas ou mais propriedades ou métodos com o mesmo nome. Exceto para membros derivados sobrecarregados, cada membro sobrecarregado deve ter listas de parâmetros diferentes, e os seguintes itens não podem ser usados como um recurso diferenciador ao sobrecarregar uma propriedade ou procedimento:

  • Modificadores, como ByVal ou ByRef, que se aplicam a um membro, ou parâmetros do membro.

  • Nomes dos parâmetros

  • Tipos de procedimentos de devolução

A Overloads palavra-chave é opcional ao sobrecarregar, mas se algum membro sobrecarregado usar a Overloads palavra-chave, todos os outros membros sobrecarregados com o mesmo nome também devem especificar essa palavra-chave.

As classes derivadas podem sobrecarregar membros herdados com membros que têm parâmetros e tipos de parâmetros idênticos, um processo conhecido como sombreamento por nome e assinatura. Se a Overloads palavra-chave for usada ao sombrear por nome e assinatura, a implementação do membro da classe derivada será usada em vez da implementação na classe base, e todas as outras sobrecargas para esse membro estarão disponíveis para instâncias da classe derivada.

Se a Overloads palavra-chave for omitida ao sobrecarregar um membro herdado com um membro que tenha parâmetros e tipos de parâmetros idênticos, a sobrecarga será chamada de sombreamento pelo nome. O sombreamento por nome substitui a implementação herdada de um membro e torna todas as outras sobrecargas indisponíveis para instâncias da classe derivada e seus enganadores.

Os Overloads modificadores e Shadows não podem ser usados com a mesma propriedade ou método.

Exemplo

O exemplo a seguir cria métodos sobrecarregados que aceitam uma ou Decimal representação String de um valor em dólar e retornam uma cadeia de caracteres que contém o imposto sobre vendas.

Para usar este exemplo para criar um método sobrecarregado

  1. Abra um novo projeto e adicione uma classe chamada TaxClass.

  2. Adicione o seguinte código à classe TaxClass.

    Public Class TaxClass
        Overloads Function TaxAmount(ByVal decPrice As Decimal,
             ByVal TaxRate As Single) As String
            TaxAmount = "Price is a Decimal. Tax is $" &
               (CStr(decPrice * TaxRate))
        End Function
    
        Overloads Function TaxAmount(ByVal strPrice As String,
              ByVal TaxRate As Single) As String
            TaxAmount = "Price is a String. Tax is $" &
               CStr((CDec(strPrice) * TaxRate))
        End Function
    End Class
    
  3. Adicione o seguinte procedimento ao seu formulário.

    Sub ShowTax()
        ' 8% tax rate.
        Const TaxRate As Single = 0.08
        ' $64.00 Purchase as a String.
        Dim strPrice As String = "64.00"
        ' $64.00 Purchase as a Decimal.
        Dim decPrice As Decimal = 64
        Dim aclass As New TaxClass
        'Call the same method with two different kinds of data.
        MsgBox(aclass.TaxAmount(strPrice, TaxRate))
        MsgBox(aclass.TaxAmount(decPrice, TaxRate))
    End Sub
    
  4. Adicione um botão ao seu formulário e chame o ShowTax procedimento a Button1_Click partir do evento do botão.

  5. Execute o projeto e clique no botão no formulário para testar o procedimento sobrecarregado ShowTax .

Em tempo de execução, o compilador escolhe a função sobrecarregada apropriada que corresponde aos parâmetros que estão sendo usados. Quando você clica no botão, o método sobrecarregado é chamado primeiro com um Price parâmetro que é uma cadeia de caracteres e a mensagem, "Preço é uma cadeia de caracteres. O imposto é de US $ 5,12" é exibido. TaxAmount é chamado com um Decimal valor na segunda vez e a mensagem, "Preço é um decimal. O imposto é de US $ 5,12" é exibido.

Consulte também