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
, Function
Sub
, , Property
, Interface
, Class
, Structure
e 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
, Protected
Friend
ou Private
.
Nota
A Shadows
palavra-chave pode ser aplicada a todos os membros da interface. A Overloads
palavra-chave pode ser aplicada a Sub
, Function
e Property
declarações declaradas numa definição de interface. Além disso, Property
as declarações podem ter, Default
ReadOnly
ou WriteOnly
modificadores. Nenhum dos outros modificadores ,Public
Friend
Private
, Shared
Protected
, Overrides
, , MustOverride
ou 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
, Overridable
Overrides
, , Public
, Friend
Private
Protected Friend
MustOverride
Protected
Default
e .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, Interface2
herda 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ópicos relacionados
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. |