Compartilhar via


Interfaces (Visual Basic)

Interfaces definem as propriedades, métodos e eventos que classes podem implementar. Interfaces permitem que você defina os recursos como pequenos grupos de propriedades, métodos e eventos relacionados; isso reduz os problemas de compatibilidade porque você pode desenvolver implementações avançadas para suas interfaces sem colocar em risco o código existente. Você pode adicionar novos recursos em qualquer momento desenvolvendo interfaces e implementações adicionais.

Há várias outras razões por que você talvez queira usar interfaces em vez de herança de classe:

  • Interfaces são mais adequadas para situações em que os aplicativos requerem que muitos tipos de objetos possivelmente não relacionados forneçam uma determinada funcionalidade.

  • Interfaces são mais flexíveis do que as classes base porque você pode definir uma implementação única que pode implementar várias interfaces.

  • Interfaces são melhores em situações em que não é necessário herdar a implementação de um classe base.

  • Interfaces são úteis quando você não pode usar a herança de classe. Por exemplo, estruturas não podem herdar de classes, mas eles podem implementar interfaces.

Declarando Interfaces

Definições de interface são envolvidas dentro de declarações Interface e End Interface. Após a declaração Interface, você pode adicionar uma declaração Inherits opcional que lista uma ou mais interfaces herdadas. As declarações Inherits deve preceder todas as outras declarações nos comentários de exceção de declaração. The remaining statements in the interface definition should be Event, Sub, Function, Property, Interface, Class, Structure, and Enum statements. Interfaces não podem conter código de implementação ou declarações associadas como o código de implementação, como End Sub ou End Property.

Num namespace, declarações de interface são Friend por padrão, mas elas também podem ser explicitamente declaradas como Public ou Friend. Interfaces definidas dentro de classes, módulos, interfaces e estruturas são Public por padrão, mas eles podem também ser explicitamente declarados como Public, Friend, Protected ou Private.

Dica

A palavra-chave Shadows pode ser aplicada a todos os membros de interface.A palavra-chave Overloads pode ser aplicada a declarações Sub, Function e Property declaradas numa definição de interface.Além disso, declarações Property podem ter os modificadores Default, ReadOnly ou WriteOnly.Nenhum dos outros modificadores—Public, Private, Friend, Protected, Shared, Overrides, MustOverride ou Overridable—são permitidos.Para obter mais informações, consulte Contextos de declaração e níveis de acesso padrão (Visual Basic).

Por exemplo, o código a seguir define uma interface com uma função, uma propriedade e um evento.

Interface IAsset
    Event ComittedChange(ByVal Success As Boolean)
    Property Division() As String 
    Function GetID() As Integer 
End Interface

Implementar Interfaces

O Visual Basic palavra reservada Implements é usado de duas maneiras. O Implements declaração significa que uma classe ou estrutura implementa uma interface. O Implements palavra-chave significa que um membro de classe ou estrutura implementa um membro de interface específica.

Implementa Declaração

Se uma classe ou estrutura implementa uma ou mais interfaces, ele deve incluir a Implements instrução imediatamente após a Class ou Structure instrução. O Implements a instrução requer uma lista separada por vírgulas de interfaces para ser implementado por uma classe. A classe ou estrutura deve implementar todos os membros de interface usando o Implements palavra-chave.

Palavra-chave Implements

O Implements palavra-chave requer uma lista separada por vírgulas de membros de interface a serem implementados. Geralmente, apenas um membro de interface única for especificado, mas você pode especificar vários membros. A especificação de um membro da interface consiste em nome da interface, o que deve ser especificado em uma instrução implements dentro da classe; um período; e o nome da função de membro, da propriedade ou do evento a serem implementados. O nome de um membro que implementa um membro da interface pode usar qualquer identificador válido e não está limitado ao InterfaceName_MethodName convenção usada em versões anteriores do Visual Basic.

Por exemplo, o código a seguir mostra como declarar uma sub-rotina nomeada Sub1 que implementa um método de uma interface:

Class Class1
    Implements interfaceclass.interface2

    Sub Sub1(ByVal i As Integer) Implements interfaceclass.interface2.Sub1
    End Sub 
End Class

Os tipos de parâmetro e tipos de retorno do membro implementação devem coincidir com a declaração de propriedade ou membro de interface na interface. A maneira mais comum para implementar um elemento de uma interface é com um membro que tenha o mesmo nome como a interface, conforme mostrado no exemplo anterior.

Para declarar a implementação de um método de interface, você pode usar todos os atributos que são legais em declarações de método de instância, incluindo Overloads, Overrides, Overridable, Public, Private, Protected, Friend, Protected Friend, MustOverride, Default, e Static. O Shared atributo não é legal, pois ele define uma classe em vez de um método de instância.

Usando Implements, você também pode escrever um único método que implementa vários métodos definidos em uma interface, como no exemplo a seguir:

Class Class2
    Implements I1, I2

    Protected Sub M1() Implements I1.M1, I1.M2, I2.M3, I2.M4
    End Sub 
End Class

Você pode usar um membro particular para implementar um membro da interface. Quando um membro particular implementa um membro de uma interface, esse membro fica disponível por meio da interface, mesmo que ele não está disponível diretamente em variáveis de objeto para a classe.

Exemplos de implementação de interface

As classes que implementam uma interface devem implementar todas as suas propriedades, métodos e eventos.

O exemplo a seguir define duas interfaces. A segunda interface, Interface2, herda Interface1 e define um método e propriedade adicionais.

Interface Interface1
    Sub sub1(ByVal i As Integer)
End Interface 

' Demonstrates interface inheritance. 
Interface Interface2
    Inherits Interface1
    Sub M1(ByVal y As Integer)
    ReadOnly Property Num() As Integer 
End Interface

O próximo exemplo implementa Interface1, a interface definida no exemplo anterior:

Public Class ImplementationClass1
    Implements Interface1
    Sub Sub1(ByVal i As Integer) Implements Interface1.sub1
        ' Insert code here to implement this method. 
    End Sub 
End Class

O exemplo final implementa Interface2, incluindo um método herdado de Interface1:

Public Class ImplementationClass2
    Implements Interface2
    Dim INum As Integer = 0
    Sub sub1(ByVal i As Integer) Implements Interface2.sub1
        ' Insert code here that implements this method. 
    End Sub 
    Sub M1(ByVal x As Integer) Implements Interface2.M1
        ' Insert code here to implement this method. 
    End Sub 

    ReadOnly Property Num() As Integer Implements Interface2.Num
        Get
            Num = INum
        End Get 
    End Property 
End Class

Tópicos relacionados

Título

Descrição

Instruções passo a passo: criando e implementando interfaces (Visual Basic)

Fornece um procedimento detalhado que o leva pelo processo de definição e implementação de sua própria interface.

Variação em interfaces genéricas (C# e Visual Basic)

Discute a covariância e/contravariância no interfaces genéricas e fornece uma lista de variant interfaces genéricas na.NET Framework.