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
oEnd 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'interfacciaFriend
.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 tramitevarAsClass
, laSub
proceduradoSomething
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
.