Istruzione Interface (Visual Basic)

Aggiornamento: novembre 2007

Dichiara il nome di un'interfaccia e introduce le definizioni dei membri che essa comprende.

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

  • attributelist
    Facoltativo. Per informazioni, vedere Elenco degli attributi.

  • accessmodifier
    Facoltativo. Può essere uno dei seguenti:

    Per informazioni, vedere Livelli di accesso in Visual Basic.

  • Shadows
    Facoltativo. Per informazioni, vedere Shadows.

  • name
    Obbligatorio. Nome dell'interfaccia. Per informazioni, vedere Nomi di elementi dichiarati.

  • Of
    Facoltativo. Specifica che si tratta di un'interfaccia generica.

  • typelist
    Obbligatorio se si utilizza la parola chiave Of. Elenco di parametri di tipo per l'interfaccia. Per informazioni, vedere Elenco dei tipi.

  • Inherits
    Facoltativo. Indica che l'interfaccia eredita gli attributi e i membri di un'altra o di altre interfacce. Per informazioni, vedere Istruzione Inherits.

  • interfacenames
    Obbligatorio se si utilizza l'istruzione Inherits. Nomi delle interfacce da cui deriva questa interfaccia.

  • modifiers
    Facoltativo. Modificatori corretti per il membro dell'interfaccia in corso di definizione.

  • Property
    Facoltativo. Definisce una proprietà che è un membro dell'interfaccia.

  • Function
    Facoltativo. Definisce una routine Function che è un membro dell'interfaccia.

  • Sub
    Facoltativo. Definisce una routine Sub che è un membro dell'interfaccia.

  • Event
    Facoltativo. Definisce un evento che è un membro dell'interfaccia.

  • Interface
    Facoltativo. Definisce un'interfaccia nidificata all'interno di questa interfaccia. La definizione dell'interfaccia nidificata 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 di Interface.

Note

Un'interfaccia definisce un insieme di membri, come ad esempio proprietà e routine, che classi e strutture possono implementare. L'interfaccia definisce soltanto le firme dei membri e non il loro funzionamento interno.

Una classe o una struttura implementa l'interfaccia fornendo il codice per ogni membro definito dall'interfaccia. Infine, quando l'applicazione creerà un'istanza da quella classe o struttura, esisterà un oggetto che verrà eseguito in memoria. Per ulteriori informazioni, vedere Programmazione orientata a oggetti in Visual Basic e Interfacce in Visual Basic.

Per un confronto tra interfacce e classi, vedere Cenni preliminari sulle interfacce.

L'istruzione Interface può essere utilizzata soltanto a livello di modulo o di spazio dei nomi. In altri termini, il contesto della dichiarazione per un'interfaccia deve essere costituito da un file di origine, uno spazio dei nomi, una classe, una struttura, un modulo o un'interfaccia, ma non una routine o un blocco. Per ulteriori informazioni, vedere Contesti delle dichiarazioni e livelli di accesso predefinito.

L'accesso predefinito per le interfacce è di tipo Friend (Visual Basic). È possibile modificarne i livelli di accesso mediante gli appositi modificatori. Per ulteriori informazioni, vedere Livelli di accesso in Visual Basic.

Regole

  • Nidificazione delle interfacce. È possibile definire un'interfaccia all'interno di un'altra. L'interfaccia esterna viene detta interfaccia contenitore, mentre l'interfaccia interna viene detta interfaccia nidificata.

  • Dichiarazione di membro. Quando si dichiara una proprietà o una routine come membro di un'interfaccia, si definisce soltanto la firma di quella proprietà o routine. Questa comprende il tipo di elemento (proprietà o routine), i suoi parametri e i tipi di parametri e il tipo restituito. Per questa ragione, la definizione del membro utilizza soltanto una riga di codice e le istruzioni di chiusura come End Function o End Property in un'interfaccia non sono valide.

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

  • Modificatori di membri. Quando si definiscono i membri dei moduli, non è possibile utilizzare alcun modificatore di accesso, né si può specificare Shared (Visual Basic) o qualche altro modificatore di routine ad eccezione di Overloads. È possibile dichiarare qualsiasi membro con Shadows e utilizzare Default (Visual Basic), ReadOnly (Visual Basic) o WriteOnly nella definizione di una proprietà.

  • Ereditarietà. Se l'interfaccia utilizza l'Istruzione Inherits, è possibile specificare una o più interfacce di base. È possibile ereditare da due interfacce anche se ciascuna di esse definisce un membro con lo stesso nome. In tal caso, tuttavia, il codice di implementazione deve utilizzare la qualificazione dei nomi per specificare quale membro viene implementato.

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

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

  • Implementazione. Quando una classe utilizza l'istruzione Implements (Visual Basic) per implementare l'interfaccia, deve implementare ogni membro definito all'interno dell'interfaccia. Ogni firma del codice di implementazione, inoltre, deve corrispondere esattamente alla firma equivalente definita nell'interfaccia. Il nome del membro nel codice di implementazione, tuttavia, non deve corrispondere al nome del membro definito nell'interfaccia.

    Quando una classe implementa una routine, quest'ultima non può essere designata come Shared.

  • Proprietà predefinita. Un'interfaccia può specificare al massimo una proprietà come proprietà predefinita, alla quale si può fare riferimento senza utilizzare il nome della proprietà. Questa proprietà viene specificata dichiarandola con il modificatore Default (Visual Basic). Per ulteriori informazioni, vedere Proprietà predefinite.

    Tenere presente che questo significa che un'interfaccia può definire una proprietà predefinita soltanto se non ne eredita nessuna.

Comportamento

  • **Livello di accesso.**Tutti i membri dell'interfaccia sono caratterizzati implicitamente da un accesso di tipo Public (Visual Basic). Quando si definisce un membro non è consentito utilizzare alcun modificatore di accesso. Una classe che implementa l'interfaccia può tuttavia dichiarare un livello di accesso per ciascun membro implementato.

    Se si assegna un'istanza di classe a una variabile, il livello di accesso dei suoi membri può essere diverso a seconda che il tipo di dati della variabile sia l'interfaccia sottostante o la classe che la implementa. Questa condizione è illustrata nell'esempio che segue.

    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 attraverso varAsInterface, essi avranno tutti un accesso di tipo Public. Se invece si accede ai membri attraverso varAsClass, la routine SubdoSomething è caratterizzata da un accesso di tipo Private.

  • Ambito. L'ambito di un'interfaccia corrisponde allo spazio dei nomi, alla classe, alla struttura o al modulo propri dell'interfaccia.

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

  • Durata. Un'interfaccia di per sé non ha una durata, né l'hanno i suoi membri. Quando una classe implementa un'interfaccia e viene creato un oggetto come istanza di quella classe, l'oggetto ha una durata all'interno dell'applicazione in cui è in esecuzione. Per ulteriori informazioni, vedere "Durata" in Istruzione Class (Visual Basic).

Esempio

Nell'esempio seguente l'istruzione Interface viene utilizzata per definire un'interfaccia denominata thisInterface che richiede l'implementazione 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

Osservare che le istruzioni Property e Function non introducono blocchi che terminano con End Property e End Function all'interno dell'interfaccia. L'interfaccia definisce soltanto le firme dei suoi membri. I blocchi Property e Function completi compaiono in una classe che implementa thisInterface.

Vedere anche

Concetti

Tipi generici in Visual Basic

Riferimenti

Istruzione Class (Visual Basic)

Istruzione Module

Istruzione Structure

Istruzione Property

Istruzione Function (Visual Basic)

Istruzione Sub (Visual Basic)

Altre risorse

Interfacce in Visual Basic