Condividi tramite


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 Opzionale. Vedere Elenco attributi.
accessmodifier Opzionale. Può essere uno dei seguenti:

- Pubblico
- Protetto
- Amico
- Privato
- Amico protetto
- Privato protetto

Vedere Livelli di accesso in Visual Basic.
Shadows Opzionale. Vedi Ombre.
name Obbligatorio. Nome di questa interfaccia. Vedere Nomi di elementi dichiarati.
Of Opzionale. 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 e Out modificatori generici. Vedere Elenco dei tipi.
Inherits Opzionale. Indica che questa interfaccia eredita gli attributi e i membri di un'altra interfaccia o interfacce. Vedere L'istruzione Inherits.
interfacenames Obbligatorio se si usa l'istruzione Inherits . Nomi delle interfacce da cui deriva questa interfaccia.
modifiers Opzionale. Modificatori appropriati per il membro dell'interfaccia da definire.
Property Opzionale. Definisce una proprietà che è un membro dell'interfaccia.
Function Opzionale. Definisce una Function routine membro dell'interfaccia .
Sub Opzionale. Definisce una Sub routine membro dell'interfaccia .
Event Opzionale. Definisce un evento che è un membro dell'interfaccia.
Interface Opzionale. Definisce un'interfaccia annidata all'interno di questa interfaccia. La definizione dell'interfaccia annidata deve terminare con un'istruzione End Interface .
Class Opzionale. Definisce una classe che è un membro dell'interfaccia. La definizione della classe membro deve terminare con un'istruzione End Class .
Structure Opzionale. 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 Interface definizione.

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

È possibile 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 di dichiarazione e livelli di accesso predefiniti.

Per impostazione predefinita, le interfacce sono 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 una sola riga di codice e le istruzioni di terminazione, End Function ad esempio 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 di routine o condiviso , ad eccezione di Overload. È possibile dichiarare qualsiasi membro con Shadows ed è possibile usare 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.

  • Default, proprietà. 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 Default .

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

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. Nell'esempio seguente viene illustrato questo.

    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 della 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" 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 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 e Function completi Property vengono visualizzati in una classe che implementa thisInterface.

Vedere anche