Instrução Interface (Visual Basic)
Declara o nome de uma interface e apresenta as definições dos membros que a interface compreende.
Sintaxe
[ <attributelist> ] [ accessmodifier ] [ Shadows ] _
Interface name [ ( Of typelist ) ]
[ Inherits interfacenames ]
[ [ modifiers ] Property membername ]
[ [ modifiers ] Function membername ]
[ [ modifiers ] Sub membername ]
[ [ modifiers ] Event membername ]
[ [ modifiers ] Interface membername ]
[ [ modifiers ] Class membername ]
[ [ modifiers ] Structure membername ]
End Interface
Partes
Termo | Definição |
---|---|
attributelist |
Opcional. Veja Lista de atributo. |
accessmodifier |
Opcional. Um dos seguintes pode ser feito: - Público - Protegido - Friend - Privado - Amigo Protegido - Particular Protegido Consulte Níveis de acesso no Visual Basic. |
Shadows |
Opcional. Confira Sombras. |
name |
Obrigatórios. Nome dessa interface. Confira Nomes de elemento declarados. |
Of |
Opcional. Especifica que essa é uma interface genérica. |
typelist |
Obrigatório se você usar a palavra-chave De. Lista de parâmetros de tipo para essa interface. Como opção, cada parâmetro de tipo pode ser declarado variante usando os modificadores In e Out genéricos. Confira Lista de tipos. |
Inherits |
Opcional. Indica que essa interface herda os atributos e os membros de outra interface ou interfaces. Confira Instrução Inherits. |
interfacenames |
Obrigatório se você usar a instrução Inherits . Os nomes das interfaces das quais essa interface deriva. |
modifiers |
Opcional. Modificadores apropriados para o membro da interface que está sendo definido. |
Property |
Opcional. Define uma propriedade que é um membro da interface. |
Function |
Opcional. Define um procedimento Function que é um membro da interface. |
Sub |
Opcional. Define um procedimento Sub que é um membro da interface. |
Event |
Opcional. Define um evento que é um membro da interface. |
Interface |
Opcional. Define uma interface aninhada dentro dessa interface. A definição de interface aninhada deve ser encerrada com uma instrução End Interface . |
Class |
Opcional. Define uma classe que é um membro da interface. A definição da classe de membro deve ser encerrada com uma instrução End Class . |
Structure |
Opcional. Define uma estrutura que é um membro da interface. A definição da estrutura de membro deve ser encerrada com uma instrução End Structure . |
membername |
Obrigatório para cada propriedade, procedimento, evento, interface, classe ou estrutura definida como um membro da interface. O nome do membro. |
End Interface |
Termina a definição do bloco Interface . |
Comentários
Uma interface define um conjunto de membros, como propriedades e procedimentos, que as classes e estruturas podem implementar. A interface define apenas as assinaturas dos membros e não seus trabalhos internos.
Uma classe ou estrutura implementa a interface fornecendo código para cada membro definido pela interface. Por fim, quando o aplicativo cria uma instância dessa classe ou estrutura, um objeto existe e é executado na memória. Para obter mais informações, confira Objetos e classes e Interfaces.
Você só pode usar Interface
no namespace ou no nível do módulo. Isso significa que o contexto de declaração de uma interface precisa ser um arquivo de origem, namespace, classe, estrutura, módulo, ou interface, e não pode ser um procedimento ou bloco. Para obter mais informações, consulte Contextos de declaração e níveis de acesso padrão.
As interfaces assumem o padrão de acesso Amigo. Você pode ajustar os níveis de acesso com os modificadores de acesso. Para obter mais informações, consulte Níveis de acesso no Visual Basic.
Regras
Interfaces de aninhamento. Você pode definir uma interface dentro de outra. A interface externa é chamada de interface independente, e a interface interna é chamada de interface aninhada.
Declaração de membro. Quando você declara uma propriedade ou procedimento como membro de uma interface, está definindo apenas a assinatura dessa propriedade ou procedimento. Isso inclui o tipo de elemento (propriedade ou procedimento), os parâmetros e tipos de parâmetro e o tipo de retorno. Devido a isso, a definição de membro usa apenas uma linha de código, e instruções de encerramento como
End Function
ouEnd Property
não são válidas em uma interface.Por outro lado, quando você define uma enumeração ou estrutura, ou uma classe ou interface aninhada, é necessário incluir os membros de dados.
Modificadores de membro. Você não pode usar nenhum modificador de acesso ao definir membros do módulo nem pode especificar Compartilhado ou qualquer modificador de procedimento, exceto Sobrecargas. Você pode declarar qualquer membro com Sombras e usar Padrão ao definir uma propriedade, bem como ReadOnly ou WriteOnly.
Herança. Se uma interface usar a instrução Inherits, você poderá especificar uma ou mais interfaces base. Você pode herdar de duas interfaces mesmo que elas definam um membro com o mesmo nome. Se você fizer isso, o código de implementação deverá usar a qualificação de nome para especificar qual membro ele está implementando.
Uma interface não pode herdar de outra interface que tenha um nível de acesso mais restritivo. Por exemplo, uma interface
Public
não pode herdar de uma interfaceFriend
.Uma interface não pode herdar de uma interface que esteja aninhada dentro dela.
Implementação. Quando uma classe usa a instrução Implements para implementar essa interface, ela precisa implementar todos os membros definidos dentro da interface. Além disso, cada assinatura no código de implementação precisa corresponder exatamente à assinatura correspondente definida nessa interface. No entanto, o nome do membro no código de implementação não precisa corresponder ao nome do membro conforme definido na interface.
Quando uma classe está implementando um procedimento, ela não pode designar o procedimento como
Shared
.Propriedade padrão. Uma interface pode especificar no máximo uma propriedade como propriedade padrão, que pode ser referenciada sem usar o nome da propriedade. Especifique essa propriedade declarando-a com o modificador Padrão.
Observe que isso significa que uma interface só pode definir uma propriedade padrão se ela herdar nenhuma.
Comportamento
Nível de acesso. Todos os membros da interface têm acesso público implicitamente. Você não pode usar nenhum modificador de acesso ao definir um membro. No entanto, uma classe que implementa a interface pode declarar um nível de acesso para cada membro implementado.
Se você atribuir uma instância de classe a uma variável, o nível de acesso dos membros poderá depender de se o tipo de dados da variável é a interface subjacente ou a classe de implementação. O exemplo a seguir ilustra essa situação.
Public Interface IDemo Sub DoSomething() End Interface Public Class implementIDemo Implements IDemo Private Sub DoSomething() Implements IDemo.DoSomething End Sub End Class Dim varAsInterface As IDemo = New implementIDemo() Dim varAsClass As implementIDemo = New implementIDemo()
Se você acessar os membros da classe pela
varAsInterface
, todos eles terão acesso público. No entanto, se você acessar membros pelavarAsClass
, oSub
procedimentodoSomething
terá acesso privado.Escopo. Uma interface está no escopo em todo o namespace, classe, estrutura ou módulo.
O escopo de cada membro de interface é a interface inteira.
Tempo de vida. Uma interface em si não tem um tempo de vida nem os membros dela. Quando uma classe implementa uma interface e um objeto é criado como uma instância dessa classe, o objeto tem um tempo de vida dentro do aplicativo no qual está em execução. Para obter mais informações, confira "Tempo de vida" na Instrução Class.
Exemplo
O exemplo a seguir usa a instrução Interface
para definir uma interface chamada thisInterface
, que deve ser implementada com uma instrução Property
e uma instrução Function
.
Public Interface thisInterface
Property ThisProp(ByVal thisStr As String) As Char
Function ThisFunc(ByVal thisInt As Integer) As Integer
End Interface
Observe que as instruções Property
e Function
não introduzem blocos que terminam com End Property
e End Function
dentro da interface. A interface define somente a assinatura dos membros. Os blocos Property
e Function
completos aparecem em uma classe que implementa thisInterface
.