Implementa a instrução
Especifica uma interface ou classe que será implementada no módulo de classe no qual ele aparece.
Sintaxe
Implementa [ Classe InterfaceName | ]
O InterfaceName ou Classe necessário é o nome de uma interface ou classe em uma biblioteca de tipos cujos métodos serão implementados pelos métodos correspondentes na classe Visual Basic.
Comentários
Uma interface é uma coleção de protótipos que representa os membros (métodos e propriedades) que a interface encapsula; ou seja, ela contém apenas as declarações para os procedimentos de membro. Uma classe fornece uma implementação de todos os métodos e propriedades de uma ou mais interfaces. As classes fornecem o código usado quando cada função é chamada por um controlador da classe. Todas as classes implementam pelo menos uma interface, que é considerada a interface padrão da classe. No Visual Basic, qualquer membro que não seja explicitamente membro de uma interface implementada é implicitamente um membro da interface padrão.
Quando uma classe visual basic implementa uma interface, a classe Visual Basic fornece suas próprias versões de todos os procedimentos públicos especificados na biblioteca de tipos da Interface. Além de fornecer um mapeamento entre os protótipos de interface e seus procedimentos, a instrução Implements faz com que a classe aceite chamadas COM QueryInterface para a ID de interface especificada.
Observação
O Visual Basic não implementa classes ou interfaces derivadas.
Ao implementar uma interface ou classe, você deve incluir todos os procedimentos públicos envolvidos. Um membro ausente em uma implementação de uma interface ou classe causa um erro. Se você não colocar código em um dos procedimentos em uma classe que está implementando, poderá gerar o erro apropriado (Const E_NOTIMPL = &H80004001) para que um usuário da implementação entenda que um membro não foi implementado.
A instrução Implements não pode ser exibida em um módulo padrão.
Exemplo
O exemplo a seguir mostra como usar a instrução Implements para disponibilizar um conjunto de declarações para várias classes. Ao compartilhar as declarações por meio da instrução Implements , nenhuma das classes precisa fazer declarações em si. O exemplo também mostra como o uso de uma interface permite a abstração: uma variável de tipo forte pode ser declarada usando o tipo de interface. Em seguida, ele pode ser atribuído objetos de diferentes tipos de classe que implementam a interface.
Suponha que haja dois formulários, SelectorForm e DataEntryForm. O formulário seletor tem dois botões, Dados do Cliente e Dados do Fornecedor. Para inserir informações de nome e endereço para um cliente ou um fornecedor, o usuário clica no botão cliente ou no botão fornecedor no formulário seletor e insere o nome e o endereço usando o formulário de entrada de dados. O formulário de entrada de dados tem dois campos de texto, Nome e Endereço.
O código a seguir para as declarações de interface está em uma classe chamada PersonalData:
Public Name As String
Public Address As String
O código que dá suporte aos dados do cliente está em um módulo de classe chamado Cliente. Observe que a interface PersonalData é implementada com membros nomeados com o nome PersonalData_
da interface como prefixo.
Implements PersonalData
'For PersonalData implementation
Private m_name As String
Private m_address As String
'Customer specific
Public CustomerAgentId As Long
'PersonalData implementation
Private Property Let PersonalData_Name(ByVal RHS As String)
m_name = RHS
End Property
Private Property Get PersonalData_Name() As String
PersonalData_Name = m_name
End Property
Private Property Let PersonalData_Address(ByVal RHS As String)
m_address = RHS
End Property
Private Property Get PersonalData_Address() As String
PersonalData_Address = m_address
End Property
'nitialize members
Private Sub Class_Initialize()
m_name = "[customer name]"
m_address = "[customer address]"
CustomerAgentID = 0
End Sub
O código que dá suporte aos dados do fornecedor está em um módulo de classe chamado Fornecedor:
Implements PersonalData
'for PersonalData implementation
Private m_name As String
Private m_address As String
'Supplier specific
Public NumberOfProductLines As Long
'PersonalData implementation
Private Property Let PersonalData_Name(ByVal RHS As String)
m_name = RHS
End Property
Private Property Get PersonalData_Name() As String
PersonalData_Name = m_name
End Property
Private Property Let PersonalData_Address(ByVal RHS As String)
m_address = RHS
End Property
Private Property Get PersonalData_Address() As String
PersonalData_Address = m_address
End Property
'initialize members
Private Sub Class_Initialize()
m_name = "[supplier name]"
m_address = "[supplier address]"
NumberOfProductLines = 15
End Sub
O código a seguir dá suporte ao formulário Seletor :
Private cust As New Customer
Private sup As New Supplier
Private Sub Customer_Click()
Dim frm As New DataEntryForm
Set frm.PD = cust
frm.Show 1
End Sub
Private Sub Supplier_Click()
Dim frm As New DataEntryForm
Set frm.PD = sup
frm.Show 1
End Sub
O código a seguir dá suporte ao formulário de Entrada de Dados :
Private m_pd As PersonalData
Private Sub SetTextFields()
With m_pd
Text1 = .Name
Text2 = .Address
End With
End Sub
Public Property Set PD(Data As PersonalData)
Set m_pd = Data
SetTextFields
End Property
Private Sub Text1_Change()
m_pd.Name = Text1.Text
End Sub
Private Sub Text2_Change()
m_pd.Address = Text2.Text
End Sub
Observe como, no formulário de entrada de dados, a variável m_pd é declarada usando a interface PersonalData e pode ser atribuída objetos da classe Cliente ou Fornecedor porque ambas as classes implementam a interface PersonalData.
Observe também que a variável m_pd só pode acessar os membros da interface PersonalData. Se um objeto Customer for atribuído a ele, o CustomerAgentId membro específico do cliente não estará disponível. Da mesma forma, se um objeto Supplier for atribuído a ele, o membro específico do fornecedor NumberOfProductLines não estará disponível. Atribuir um objeto a variáveis declaradas usando interfaces diferentes fornece um comportamento polimórfico.
Observe também que as classes Cliente e Fornecedor , conforme definido anteriormente, não expõem os membros da interface PersonalData. A única maneira de acessar os membros PersonalData é atribuir um objeto Cliente ou Fornecedor a uma variável declarada como PersonalData. Se um comportamento semelhante à herança for desejado, com a classe Cliente ou Fornecedor expondo os membros PersonalData, os membros públicos devem ser adicionados à classe. Elas podem ser implementadas delegando para as implementações da interface PersonalData.
Por exemplo, a classe Cliente pode ser estendida com o seguinte:
'emulate PersonalData inheritance
Public Property Let Name(ByVal RHS As String)
PersonalData_Name = RHS
End Property
Public Property Get Name() As String
Name = PersonalData_Name
End Property
Public Property Let Address(ByVal RHS As String)
PersonalData_Address = RHS
End Property
Public Property Get Address() As String
Address = PersonalData_Address
End Property
Confira também
Suporte e comentários
Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de