Istruzione Interface (Visual Basic)

Dichiara il nome di un'interfaccia e introduce le definizioni dei membri inclusi nell'interfaccia.

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 degli attributi.
accessmodifier Facoltativo. Può essere uno dei seguenti:

- Pubblica
- Protected
- Friend
- Privata
- Protected Friend
- Private Protected

Vedere Access levels in Visual Basic.
Shadows Facoltativo. Vedere Shadows.
name Obbligatorio. Nome di questa 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 variante usando i modificatori generici In e Out. Vedere Elenco tipi.
Inherits Facoltativo. Indica che questa interfaccia eredita gli attributi e i membri di un'altra interfaccia o interfacce. Vedere Istruzione Inherits.
interfacenames Obbligatorio se si usa l'istruzione Inherits. Nomi delle interfacce da cui deriva questa interfaccia.
modifiers Facoltativo. Modificatori appropriati per il membro dell'interfaccia da definire.
Property Facoltativo. Definisce una proprietà che è un membro dell'interfaccia.
Function Facoltativo. Definisce una routine Function membro dell'interfaccia.
Sub Facoltativo. Definisce una routine Sub membro dell'interfaccia.
Event Facoltativo. Definisce un evento che è un membro dell'interfaccia.
Interface Facoltativo. Definisce un'interfaccia annidata all'interno di questa interfaccia. La definizione dell'interfaccia annidata deve terminare con un'istruzione End Interface.
Class Facoltativo. Definisce una classe che è un membro dell'interfaccia. La definizione della classe membro deve terminare con un'istruzione End Class.
Structure Facoltativo. Definisce una struttura che è un membro dell'interfaccia. La definizione della struttura membro deve terminare con un'istruzione End Structure.
membername Obbligatorio per ogni proprietà, routine, evento, interfaccia, classe o struttura definita come membro dell'interfaccia. Nome del membro.
End Interface Termina la definizione Interface.

Osservazioni:

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 lavori 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 e viene eseguito in memoria. Per altre informazioni, vedere Oggetti e classi e interfacce.

Si può usare Interface solo a livello di spazio dei nomi o 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.

Per impostazione predefinita, le interfacce hanno l’accesso Friend. È possibile regolare i livelli di accesso con i modificatori di accesso. Per altre informazioni, vedere Livelli di accesso in Visual Basic.

Regole

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

  • Dichiarazione 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 motivo, la definizione del membro usa solo una riga di codice e le istruzioni di terminazione, ad esempio End Function o End Property, non sono valide in un'interfaccia.

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

  • Modificatori membri. Non è possibile utilizzare modificatori di accesso quando si definiscono i membri del modulo, né è possibile specificare modificatore condiviso o di qualsiasi routine, ad eccezione degli Overload. È possibile dichiarare qualsiasi membro con Shadows, ed è possibile usare Impostazione predefinita (Default) quando si definisce una proprietà, nonché ReadOnly o WriteOnly.

  • Ereditarietà. 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 qualifica del nome per specificare il membro che sta implementando.

    Un'interfaccia non può ereditare da un'altra interfaccia con un livello di accesso più restrittivo. Ad esempio, un'interfaccia Public 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ò designare la routine 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 tale proprietà dichiarandola con il modificatore Impostazione predefinita.

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

Comportamento

  • Livello di accesso. Tutti i membri dell'interfaccia hanno accesso pubblico in modo implicito. Non è possibile utilizzare 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. Ciò è illustrato 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, tutti hanno accesso pubblico. Tuttavia, se si accede ai membri tramite varAsClass, la Sub procedura doSomething ha accesso privato.

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

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

  • Durata. Un'interfaccia non ha una durata, né ce l’hanno 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" nell'Istruzione class.

Esempio

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

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 istruzioni Property e Function non introducono blocchi che terminano con End Property e End Function all'interno dell'interfaccia. L'interfaccia definisce solo la firma dei suoi membri. I blocchi completi di Property e Function vengono visualizzati in una classe che implementa thisInterface.

Vedi anche