Partilhar via


Interfaces (Visual Basic)

As interfaces definem as propriedades, métodos e eventos que as classes podem implementar. As interfaces permitem definir recursos como pequenos grupos de propriedades, métodos e eventos intimamente relacionados; Isso reduz os problemas de compatibilidade porque você pode desenvolver implementações aprimoradas para suas interfaces sem comprometer o código existente. Você pode adicionar novos recursos a qualquer momento, desenvolvendo interfaces e implementações adicionais.

Há várias outras razões pelas quais você pode querer usar interfaces em vez de herança de classe:

  • As interfaces são mais adequadas para situações em que seus aplicativos exigem muitos tipos de objetos possivelmente não relacionados para fornecer determinadas funcionalidades.

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

  • As interfaces são melhores em situações em que você não precisa herdar a implementação de uma classe base.

  • As interfaces são úteis quando não se pode usar a herança de classes. Por exemplo, as estruturas não podem herdar de classes, mas podem implementar interfaces.

Declarando interfaces

As definições da interface estão delimitadas entre as instruções `Interface` e `End Interface`. Após a Interface instrução, você pode adicionar uma instrução opcional Inherits que lista uma ou mais interfaces herdadas. As Inherits declarações devem preceder todas as outras declarações da declaração, exceto as observações. As instruções restantes na definição da interface devem ser Event, Sub, Function, Property, Interface, Class, Structuree Enum instruções. As interfaces não podem conter nenhum código de implementação ou instruções associadas ao código de implementação, como End Sub ou End Property.

Em um namespace, as instruções de interface são Friend por padrão, mas também podem ser explicitamente declaradas como Public ou Friend. As interfaces definidas dentro de classes, módulos, interfaces e estruturas são Public por padrão, mas também podem ser explicitamente declaradas como Public, Friend, Protected, ou Private.

Observação

A Shadows palavra-chave pode ser aplicada a todos os membros da interface. A Overloads palavra-chave pode ser aplicada a Sub, Functione Property instruções declaradas em uma definição de interface. Além disso, Property as instruções podem ter os Default, ReadOnly ou WriteOnly modificadores. 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.

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

Implementação de interfaces

A palavra Implements reservada do Visual Basic é usada de duas maneiras. A Implements instrução significa que uma classe ou estrutura implementa uma interface. A Implements palavra-chave significa que um membro de classe ou membro da estrutura implementa um membro de interface específico.

Declaração de Implementação

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

Implementa palavra-chave

A Implements palavra-chave requer uma lista separada por vírgulas dos membros da interface para ser implementada. Geralmente, apenas um único membro da interface é especificado, mas você pode especificar vários membros. A especificação de um membro da interface consiste no nome da interface, que deve ser especificado em uma instrução implements dentro da classe; um período; e o nome da função, propriedade ou evento do membro a ser implementado. O nome de um membro que implementa um membro da interface pode usar qualquer identificador legal e não está limitado à 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 chamada 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âmetros e tipos de retorno do membro implementador devem corresponder à propriedade da interface ou à declaração do membro na interface. A maneira mais comum de implementar um elemento de uma interface é com um membro que tem o mesmo nome que a interface, como mostrado no exemplo anterior.

Para declarar a implementação de um método de interface, pode usar quaisquer atributos que sejam 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 define uma classe em vez de um método de instância.

Usando Implementso , 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 privado para implementar um membro da interface. Quando um membro privado implementa um membro de uma interface, esse membro fica disponível por meio da interface, mesmo que não esteja 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 uma propriedade e um método 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

Você pode implementar uma propriedade readonly com uma propriedade readwrite (ou seja, você não precisa declará-la readonly na classe de implementação). A implementação de uma interface promete implementar pelo menos os membros que a interface declara, mas você pode oferecer mais funcionalidades, como permitir que sua propriedade seja gravável.

Título Descrição
Passo a passo: Criando e implementando interfaces Fornece um procedimento detalhado que o leva através do processo de definição e implementação de sua própria interface.
Variância em interfaces genéricas Discute covariância e contravariância em interfaces genéricas e fornece uma lista de interfaces genéricas variantes no .NET Framework.