Partilhar via


Interfaces (Visual Basic)

As interfaces definem as propriedades, métodos e eventos que as classes podem implementar. As interfaces permitem definir características como pequenos grupos de propriedades, métodos e eventos intimamente relacionados; isto reduz os problemas de compatibilidade porque pode desenvolver implementações melhoradas para as suas interfaces sem comprometer o código existente. Pode adicionar novas funcionalidades a qualquer momento, desenvolvendo interfaces e implementações adicionais.

Existem 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 a situações em que as suas aplicações requerem 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 é possível definir uma única implementação que pode implementar várias interfaces.

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

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

Declarando Interfaces

As definições de interface são incluídas dentro das Interface declarações e End Interface declarações. Após a Interface declaração, pode adicionar uma declaraçã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 comentários. As restantes declarações na definição da interface devem ser Event, FunctionSub, , Property, Interface, Class, Structuree Enum declarações. As interfaces não podem conter nenhum código de implementação ou declarações associadas ao código de implementação, tais como End Sub ou End Property.

Num espaço de nome, as declarações de interface são Friend por defeito, 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 defeito, mas também podem ser explicitamente declaradas como Public, ProtectedFriendou Private.

Nota

A Shadows palavra-chave pode ser aplicada a todos os membros da interface. A Overloads palavra-chave pode ser aplicada a Sub, Functione Property declarações declaradas numa definição de interface. Além disso, Property as declarações podem ter, DefaultReadOnlyou WriteOnly modificadores. Nenhum dos outros modificadores ,PublicFriendPrivate , SharedProtected, Overrides, , MustOverrideou Overridable- é permitido. Para obter mais informações, consulte Os Contextos de Declaração e os Níveis de Acesso Predefinidos.

Por exemplo, o seguinte código 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 Visual Basic é usada de duas formas. A Implements declaração significa que uma classe ou estrutura implementa uma interface. A Implements palavra-chave significa que um membro da classe ou membro da estrutura implementa um membro específico da interface.

Declaração de Implementações

Se uma classe ou estrutura implementar uma ou mais interfaces, deve incluir a Implements declaração imediatamente após a Class declaração.Structure A Implements declaração requer uma lista de interfaces separadas por vírgulas para ser implementada por uma classe. A classe ou estrutura deve implementar todos os membros da interface utilizando a Implements palavra-chave.

Implementa palavra-chave

A Implements palavra-chave requer uma lista separada por vírgula de membros da interface para ser implementada. Geralmente, apenas um membro da interface é especificado, mas pode especificar vários membros. A especificação de um membro da interface é constituída pelo nome da interface, que deve ser especificada numa declaração de implementações dentro da classe; um período; e o nome da função, propriedade ou evento a implementar. O nome de um membro que implementa um membro da interface pode usar qualquer identificador legal, e não se limita à InterfaceName_MethodName convenção utilizada em versões anteriores de Visual Basic.

Por exemplo, o seguinte código mostra como declarar uma sub-rotina nomeada Sub1 que implementa um método de 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 os tipos de devolução do membro de implementação devem corresponder à propriedade da interface ou declaração de membro na interface. A forma mais comum de implementar um elemento de uma interface é com um membro que tem o mesmo nome que a interface, como mostra o exemplo anterior.

Para declarar a implementação de um método de interface, pode utilizar quaisquer atributos que sejam legais em declarações de métodos de exemplo, incluindoOverloads, OverridableOverrides, , Public, FriendPrivateProtected FriendMustOverrideProtectedDefaulte .Static O Shared atributo não é legal, uma vez que define uma classe em vez de um método de instância.

Utilizando Implements, também pode escrever um único método que implementa vários métodos definidos numa interface, como no exemplo seguinte:

Class Class2
    Implements I1, I2

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

Pode utilizar um membro privado para implementar um membro da interface. Quando um membro privado implementa um membro de uma interface, esse membro fica disponível através da interface, mesmo que não esteja disponível diretamente em variáveis de objeto para a classe.

Exemplos de implementação da 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, Interface2herda Interface1 e define uma propriedade e 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 de leitura apenas com uma propriedade de readwrite (isto é, você não tem que declará-lo apenas na classe de implementação). Implementar uma interface promete implementar pelo menos os membros que a interface declara, mas pode oferecer mais funcionalidades, como permitir que a sua propriedade seja legível.

Título Descrição
Walkthrough: Criar e Implementar Interfaces Fornece um procedimento detalhado que o leva através do processo de definição e implementação da sua própria interface.
Variação em Interfaces Genéricas Discute a covariância e contravariância em interfaces genéricas e fornece uma lista de interfaces genéricas variantes no .NET Framework.