Instrução de interface (Visual Basic)
Declara o nome de uma interface e introduz 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. Consulte Lista de Atributos. |
accessmodifier |
Opcional. Pode ser um dos seguintes: - Público - Protegido - Amigo - Privado - Amigo Protegido - Privado Protegido Consulte Níveis de acesso no Visual Basic. |
Shadows |
Opcional. Veja Sombras. |
name |
Obrigatório. Nome desta interface. Consulte Nomes de elementos declarados. |
Of |
Opcional. Especifica que esta é uma interface genérica. |
typelist |
Obrigatório se você usar a palavra-chave Of . Lista de parâmetros de tipo para esta interface. Opcionalmente, cada parâmetro de tipo pode ser declarado variante Out usando In modificadores genéricos. Consulte Lista de tipos. |
Inherits |
Opcional. Indica que essa interface herda os atributos e membros de outra interface ou interfaces. Consulte Declaração de herança. |
interfacenames |
Obrigatório se você usar a Inherits declaração. 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 Function procedimento que é um membro da interface. |
Sub |
Opcional. Define um Sub procedimento que é um membro da interface. |
Event |
Opcional. Define um evento que é um membro da interface. |
Interface |
Opcional. Define uma interface que é aninhada dentro dessa interface. A definição de interface aninhada deve ser encerrada com uma End Interface instrução. |
Class |
Opcional. Define uma classe que é um membro da interface. A definição de classe de membro deve terminar com uma End Class instrução. |
Structure |
Opcional. Define uma estrutura que é um membro da interface. A definição da estrutura de membros deve terminar com uma End Structure instrução. |
membername |
Necessário para cada propriedade, procedimento, evento, interface, classe ou estrutura definida como um membro da interface. O nome do membro. |
End Interface |
Encerra a Interface definição. |
Observações
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 o seu funcionamento interno.
Uma classe ou estrutura implementa a interface fornecendo código para cada membro definido pela interface. Finalmente, quando o aplicativo cria uma instância a partir dessa classe ou estrutura, um objeto existe e é executado na memória. Para obter mais informações, consulte Objetos, classes e interfaces.
Você pode usar Interface
somente no nível de namespace ou módulo. Isso significa que o contexto da declaração para uma interface deve 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.
Interfaces padrão para acesso de amigo . Você pode ajustar seus 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 de contenção, e a interface interna é chamada de interface aninhada.
Declaração de Membro. Ao declarar uma propriedade ou procedimento como membro de uma interface, você está definindo apenas a assinatura dessa propriedade ou procedimento. Isso inclui o tipo de elemento (propriedade ou procedimento), seus parâmetros e tipos de parâmetros e seu tipo de retorno. Devido a isso, a definição de membro usa apenas uma linha de código e terminando instruções 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 seus membros de dados.
Modificadores de membros. 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 Shadows e pode usar Default ao definir uma propriedade, bem como ReadOnly ou WriteOnly.
Herança. Se a interface usar a instrução Inherits, você poderá especificar uma ou mais interfaces base. Você pode herdar de duas interfaces, mesmo que cada uma delas defina um membro com o mesmo nome. Se você fizer isso, o código de implementação deve usar a qualificação de nome para especificar qual membro está implementando.
Uma interface não pode herdar de outra interface com um nível de acesso mais restritivo. Por exemplo, uma
Public
interface não pode herdar de umaFriend
interface.Uma interface não pode herdar de uma interface aninhada nela.
Implementação. Quando uma classe usa a instrução Implements para implementar essa interface, ela deve implementar cada membro definido na interface. Além disso, cada assinatura no código de implementação deve corresponder exatamente à assinatura correspondente definida nesta 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 sua propriedade padrão, que pode ser referenciada sem usar o nome da propriedade. Você especifica essa propriedade declarando-a com o modificador Default .
Observe que isso significa que uma interface pode definir uma propriedade padrão somente se herdar nenhuma.
Comportamento
Nível de Acesso. Todos os membros da interface têm implicitamente acesso público . Não é possível 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 de seus membros pode depender se o tipo de dados da variável é a interface subjacente ou a classe de implementação. O exemplo a seguir ilustra isso.
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 através do
varAsInterface
, todos eles terão acesso público. No entanto, se aceder aos membros atravésvarAsClass
do , oSub
procedimentodoSomething
tem acesso privado.Âmbito. Uma interface está no escopo em todo o seu namespace, classe, estrutura ou módulo.
O escopo de cada membro da interface é a interface inteira.
Duração. Uma interface em si não tem uma vida útil, nem os seus membros. 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á sendo executado. Para obter mais informações, consulte "Tempo de vida" em Declaração de classe.
Exemplo
O exemplo a seguir usa a instrução para definir uma interface chamada thisInterface
, que deve ser implementada Interface
com uma Property
instrução e uma Function
instrução.
Public Interface thisInterface
Property ThisProp(ByVal thisStr As String) As Char
Function ThisFunc(ByVal thisInt As Integer) As Integer
End Interface
Observe que as Property
instruções e Function
não introduzem blocos que terminam com End Property
e End Function
dentro da interface. A interface define apenas as assinaturas de seus membros. Os blocos e full Property
Function
aparecem em uma classe que implementa thisInterface
.