Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
As interfaces definem as propriedades, os métodos e os eventos que as classes podem implementar. As interfaces permitem definir recursos como pequenos grupos de propriedades, métodos e eventos intimamente relacionados; isso reduz 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ários outros motivos pelos quais talvez você queira 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 objeto possivelmente não relacionados para fornecer determinada funcionalidade.
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 você não pode usar herança de classe. Por exemplo, as estruturas não podem herdar de classes, mas podem implementar interfaces.
Declarando interfaces
As definições de interface estão 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 instruções Inherits devem preceder todas as outras instruções dentro da declaração, exceto comentários. As instruções restantes na definição de 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 em classes, módulos, interfaces e estruturas são Public por padrão, mas também podem ser explicitamente declaradas como Public, Friend, Protectedou 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 declarações podem ter os modificadores Default, ReadOnly, ou WriteOnly. Nenhum dos outros modificadores — Public, Private, Friend, Protected, Shared, Overrides, MustOverride ou Overridable — é permitido. 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
Implementando 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 da classe ou membro da estrutura implementa um membro de interface específico.
Instrução Implements
Se uma classe ou estrutura implementar uma ou mais interfaces, ela deve incluir a instrução Implements imediatamente após a instrução Class ou Structure. A Implements instrução requer que uma lista separada por vírgulas de interfaces seja implementada por uma classe. A classe ou estrutura deve implementar todos os membros da interface usando a Implements palavra-chave.
Palavra-chave Implements
A Implements palavra-chave requer que uma lista separada por vírgulas de membros da interface seja implementada. Em geral, apenas um único membro de interface é especificado, mas você pode especificar vários membros. A especificação de um membro de interface é composta pelo nome da interface, que deve ser especificado em uma instrução implements na classe, um período e o nome da função, da propriedade ou do evento do membro a ser implementado. O nome de um membro que implementa um membro de interface pode usar qualquer identificador legal e não se limita à 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âmetro e de retorno do membro implementado 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 da interface, conforme mostrado no exemplo anterior.
Para declarar a implementação de um método de interface, você 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, Defaulte Static. O Shared atributo não é legal, pois 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 privado para implementar um membro de interface. Quando um membro privado implementa um membro de uma interface, esse membro fica disponível por meio da interface, embora 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 herda Interface2Interface1 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 Interface1a 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 como readonly na classe sendo implementada). Implementar uma interface significa implementar pelo menos os membros que a interface declara, mas você pode oferecer mais funcionalidades, como permitir que a propriedade seja gravável.
Tópicos relacionados
| Título | Descrição |
|---|---|
| Passo a passo: criando e implementando interfaces | Fornece um procedimento detalhado que leva você pelo processo de definição e implementação de sua própria interface. |
| Variação 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. |