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. |
Discute a covariância e/contravariância no interfaces genéricas e fornece uma lista de variant interfaces genéricas na.NET Framework. |