Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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
, Structure
e 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
, Function
e 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 Implements
o , 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ópicos relacionados
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. |