Istruzione Interface (Visual Basic)

Dichiara il nome di un'interfaccia e introduce le definizioni dei membri che l'interfaccia include.

Sintassi

[ <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  

Parti

Termine Definizione
attributelist facoltativo. Vedere Elenco attributi.
accessmodifier facoltativo. Può essere uno dei seguenti:

- Pubblico
- Protetto
- Amico
- Privato
- Protected Friend
- Private Protected

Vedere Livelli di accesso in Visual Basic.
Shadows facoltativo. Vedere Ombreggiature.
name Obbligatorio. Nome dell'interfaccia. Vedere Declared Element Names.
Of facoltativo. Specifica che si tratta di un'interfaccia generica.
typelist Obbligatorio se si usa la parola chiave Of. Elenco di parametri di tipo per questa interfaccia. Facoltativamente, ogni parametro di tipo può essere dichiarato variant usando In i Out modificatori generici e . Vedere Type List.
Inherits facoltativo. Indica che questa interfaccia eredita gli attributi e i membri di un'altra interfaccia o interfaccia. Vedere Inherits Statement.
interfacenames Obbligatorio se si usa Inherits l'istruzione . Nomi delle interfacce da cui deriva questa interfaccia.
modifiers facoltativo. Modificatori appropriati per il membro di interfaccia da definire.
Property facoltativo. Definisce una proprietà che è un membro dell'interfaccia .
Function facoltativo. Definisce una Function routine membro dell'interfaccia .
Sub facoltativo. Definisce una Sub routine membro dell'interfaccia .
Event facoltativo. Definisce un evento membro dell'interfaccia .
Interface facoltativo. Definisce un'interfaccia annidata all'interno di questa interfaccia. La definizione dell'interfaccia annidata deve terminare con End Interface un'istruzione .
Class facoltativo. Definisce una classe membro dell'interfaccia . La definizione della classe membro deve terminare con End Class un'istruzione .
Structure facoltativo. Definisce una struttura che è un membro dell'interfaccia . La definizione della struttura del membro deve terminare con End Structure un'istruzione .
membername Obbligatorio per ogni proprietà, routine, evento, interfaccia, classe o struttura definita come membro dell'interfaccia. Nome del membro.
End Interface Termina la Interface definizione.

Commenti

Un'interfaccia definisce un set di membri, ad esempio proprietà e routine, che le classi e le strutture possono implementare. L'interfaccia definisce solo le firme dei membri e non i relativi funzionamento interni.

Una classe o una struttura implementa l'interfaccia fornendo il codice per ogni membro definito dall'interfaccia. Infine, quando l'applicazione crea un'istanza da tale classe o struttura, un oggetto esiste ed è in esecuzione in memoria. Per altre informazioni, vedere Oggetti e classi e interfacce.

È possibile usare solo Interface a livello di spazio dei nomi o di modulo. Ciò significa che il contesto di dichiarazione per un'interfaccia deve essere un file di origine, uno spazio dei nomi, una classe, una struttura, un modulo o un'interfaccia e non può essere una routine o un blocco. Per altre informazioni, vedere Contesti delle dichiarazioni e livelli di accesso predefiniti.

L'impostazione predefinita delle interfacce è l'accesso Friend. È possibile modificare i livelli di accesso con i modificatori di accesso. Per altre informazioni, vedere Livelli di accesso in Visual Basic.

Regole

  • Interfacce di annidamento. È possibile definire un'interfaccia all'interno di un'altra. L'interfaccia esterna è denominata interfaccia contenitore e l'interfaccia interna è denominata interfaccia annidata.

  • Dichiarazione di membro. Quando si dichiara una proprietà o una routine come membro di un'interfaccia, si definisce solo la firma di tale proprietà o routine. Sono inclusi il tipo di elemento (proprietà o routine), i relativi parametri e tipi di parametro e il relativo tipo restituito. Per questo problema, la definizione del membro usa una sola riga di codice e le istruzioni di terminazione, ad esempio o End Function , non sono valide in End Property un'interfaccia.

    Al contrario, quando si definisce un'enumerazione o una struttura o una classe o interfaccia annidata, è necessario includere i relativi membri dati.

  • Modificatori di membro. Non è possibile usare modificatori di accesso quando si definiscono i membri del modulo, né è possibile specificare Shared o qualsiasi modificatore di routine ad eccezione di Overloads. È possibile dichiarare qualsiasi membro con Shadowsed è possibile usare Default quando si definisce una proprietà, nonché ReadOnly o WriteOnly.

  • Eredità. Se l'interfaccia usa l'istruzione Inherits, è possibile specificare una o più interfacce di base. È possibile ereditare da due interfacce anche se ognuna definisce un membro con lo stesso nome. In questo caso, il codice di implementazione deve usare la qualificazione del nome per specificare quale membro sta implementando.

    Un'interfaccia non può ereditare da un'altra interfaccia con un livello di accesso più restrittivo. Ad esempio, Public un'interfaccia non può ereditare da un'interfaccia. Friend

    Un'interfaccia non può ereditare da un'interfaccia annidata al suo interno.

  • Implementazione. Quando una classe usa l'istruzione Implements per implementare questa interfaccia, deve implementare ogni membro definito all'interno dell'interfaccia. Inoltre, ogni firma nel codice di implementazione deve corrispondere esattamente alla firma corrispondente definita in questa interfaccia. Tuttavia, il nome del membro nel codice di implementazione non deve corrispondere al nome del membro come definito nell'interfaccia .

    Quando una classe implementa una routine, non può designarla come Shared .

  • Proprietà predefinita. Un'interfaccia può specificare al massimo una proprietà come proprietà predefinita, a cui è possibile fare riferimento senza usare il nome della proprietà. È possibile specificare una proprietà di questo tipo dichiararla con il modificatore Default.

    Si noti che ciò significa che un'interfaccia può definire una proprietà predefinita solo se non ne eredita nessuna.

Comportamento

  • Livello di accesso. Tutti i membri di interfaccia hanno implicitamente l'accesso Public. Non è possibile usare alcun modificatore di accesso quando si definisce un membro. Tuttavia, una classe che implementa l'interfaccia può dichiarare un livello di accesso per ogni membro implementato.

    Se si assegna un'istanza di classe a una variabile, il livello di accesso dei relativi membri può dipendere dal fatto che il tipo di dati della variabile sia l'interfaccia sottostante o la classe di implementazione. Questa condizione è illustrata nell'esempio seguente.

    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 si accede ai membri della classe tramite varAsInterface , hanno tutti accesso pubblico. Tuttavia, se si accede ai membri tramite varAsClass , la procedura ha accesso Sub doSomething privato.

  • Ambito. Un'interfaccia è nell'ambito in tutto lo spazio dei nomi, la classe, la struttura o il modulo.

    L'ambito di ogni membro di interfaccia è l'intera interfaccia.

  • Vita. Un'interfaccia non ha una durata, né i relativi membri. Quando una classe implementa un'interfaccia e un oggetto viene creato come istanza di tale classe, l'oggetto ha una durata all'interno dell'applicazione in cui è in esecuzione. Per altre informazioni, vedere "Lifetime" in Class Statement.

Esempio

Nell'esempio seguente viene Interface utilizzata l'istruzione per definire un'interfaccia denominata thisInterface , che deve essere implementata con Property un'istruzione e Function un'istruzione .

Public Interface thisInterface
    Property ThisProp(ByVal thisStr As String) As Char
    Function ThisFunc(ByVal thisInt As Integer) As Integer
End Interface

Si noti che le Property istruzioni e Function non introducono blocchi che terminano con End Property e End Function all'interno dell'interfaccia . L'interfaccia definisce solo le firme dei relativi membri. I blocchi Property completi e vengono visualizzati in una classe che implementa Function thisInterface .

Vedi anche