Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le interfacce definiscono le proprietà, i metodi e gli eventi che le classi possono implementare. Le interfacce consentono di definire funzionalità come piccoli gruppi di proprietà, metodi ed eventi strettamente correlati; Questo riduce i problemi di compatibilità perché è possibile sviluppare implementazioni avanzate per le interfacce senza compromettere il codice esistente. È possibile aggiungere nuove funzionalità in qualsiasi momento sviluppando interfacce e implementazioni aggiuntive.
Esistono diversi altri motivi per cui è possibile usare interfacce anziché l'ereditarietà delle classi:
Le interfacce sono più adatte alle situazioni in cui le applicazioni richiedono molti tipi di oggetti probabilmente non correlati per fornire determinate funzionalità.
Le interfacce sono più flessibili delle classi di base perché è possibile definire una singola implementazione in grado di implementare più interfacce.
Le interfacce sono migliori nelle situazioni in cui non è necessario ereditare l'implementazione da una classe di base.
Le interfacce sono utili quando non è possibile usare l'ereditarietà delle classi. Ad esempio, le strutture non possono ereditare dalle classi, ma possono implementare interfacce.
Dichiarazione di interfacce
Le definizioni di interfaccia sono racchiuse all'interno delle istruzioni Interface e End Interface. Dopo l'istruzione Interface è possibile aggiungere un'istruzione facoltativa Inherits che elenca una o più interfacce ereditate. Le Inherits istruzioni devono essere posizionate prima di tutte le altre istruzioni all'interno della dichiarazione, ad eccezione dei commenti. Le istruzioni rimanenti nella definizione dell'interfaccia devono essere Event, Sub, Function, Property, Interface, Class, Structure e Enum istruzioni. Le interfacce non possono contenere codice o istruzioni di implementazione associate al codice di implementazione, ad esempio End Sub o End Property.
In uno spazio dei nomi, le dichiarazioni di interfaccia sono, per impostazione predefinita, Friend, ma possono anche essere dichiarate in modo esplicito come Public o Friend. Le interfacce definite all'interno di classi, moduli, interfacce e strutture sono Public per impostazione predefinita, ma possono anche essere dichiarate in modo esplicito come Public, Friend, Protectedo Private.
Annotazioni
La Shadows parola chiave può essere applicata a tutti i membri dell'interfaccia. La Overloads parola chiave può essere applicata alle Sub, Function e Property istruzioni dichiarate in una definizione di interfaccia. Inoltre, Property le istruzioni possono avere i modificatori Default, ReadOnly o WriteOnly. Nessuno degli altri modificatori—Public, Private, Friend, Protected, Shared, Overrides, MustOverride o Overridable—è consentito. Per altre informazioni, vedere Contesti di dichiarazione e livelli di accesso predefiniti.
Ad esempio, il codice seguente definisce un'interfaccia con una funzione, una proprietà e un evento.
Interface IAsset
Event ComittedChange(ByVal Success As Boolean)
Property Division() As String
Function GetID() As Integer
End Interface
Implementazione di interfacce
La parola Implements riservata di Visual Basic viene usata in due modi. L'istruzione Implements indica che una classe o una struttura implementa un'interfaccia. La Implements parola chiave indica che un membro della classe o un membro della struttura implementa un membro di interfaccia specifico.
Istruzione Implements
Se una classe o una struttura implementa una o più interfacce, deve includere l'istruzione Implements immediatamente dopo l'istruzione Class o Structure . L'istruzione Implements richiede l'implementazione di un elenco delimitato da virgole di interfacce da una classe . La classe o la struttura deve implementare tutti i membri dell'interfaccia usando la Implements parola chiave .
Implementa parola chiave
La Implements parola chiave richiede l'implementazione di un elenco delimitato da virgole di membri dell'interfaccia. In genere, viene specificato solo un singolo membro dell'interfaccia, ma è possibile specificare più membri. La specifica di un membro di interfaccia è costituita dal nome dell'interfaccia, che deve essere specificato in un'istruzione 'implements' all'interno della classe, un punto e il nome della funzione membro, della proprietà o dell'evento da implementare. Il nome di un membro che implementa un membro di interfaccia può usare qualsiasi identificatore legale e non è limitato alla InterfaceName_MethodName convenzione usata nelle versioni precedenti di Visual Basic.
Ad esempio, il codice seguente illustra come dichiarare una subroutine denominata Sub1 che implementa un metodo di un'interfaccia:
Class Class1
Implements interfaceclass.interface2
Sub Sub1(ByVal i As Integer) Implements interfaceclass.interface2.Sub1
End Sub
End Class
I tipi di parametro e i tipi di ritorno del membro di implementazione devono corrispondere alla proprietà o alla dichiarazione del membro nell'interfaccia. Il modo più comune per implementare un elemento di un'interfaccia è con un membro con lo stesso nome dell'interfaccia, come illustrato nell'esempio precedente.
Per dichiarare l'implementazione di un metodo di interfaccia, è possibile usare tutti gli attributi legali nelle dichiarazioni dei metodi di istanza, tra cui Overloads, Overrides, Overridable, Public, Private, Protected, Friend, Protected Friend, MustOverride, Default e Static. L'attributo Shared non è valido perché definisce una classe anziché un metodo di istanza.
Usando Implements, è anche possibile scrivere un singolo metodo che implementa più metodi definiti in un'interfaccia, come nell'esempio seguente:
Class Class2
Implements I1, I2
Protected Sub M1() Implements I1.M1, I1.M2, I2.M3, I2.M4
End Sub
End Class
È possibile usare un membro privato per implementare un membro dell'interfaccia. Quando un membro privato implementa un membro di un'interfaccia, tale membro diventa disponibile tramite l'interfaccia anche se non è disponibile direttamente sulle variabili oggetto per la classe .
Esempi di implementazione dell'interfaccia
Le classi che implementano un'interfaccia devono implementare tutte le relative proprietà, metodi ed eventi.
Nell'esempio seguente vengono definite due interfacce. La seconda interfaccia, Interface2, eredita Interface1 e definisce una proprietà e un metodo aggiuntivi.
Interface Interface1
Sub sub1(ByVal i As Integer)
End Interface
' Demonstrates interface inheritance.
Interface Interface2
Inherits Interface1
Sub M1(ByVal y As Integer)
ReadOnly Property Num() As Integer
End Interface
L'esempio seguente implementa Interface1, l'interfaccia definita nell'esempio precedente:
Public Class ImplementationClass1
Implements Interface1
Sub Sub1(ByVal i As Integer) Implements Interface1.sub1
' Insert code here to implement this method.
End Sub
End Class
L'esempio finale implementa Interface2, incluso un metodo ereditato da Interface1:
Public Class ImplementationClass2
Implements Interface2
Dim INum As Integer = 0
Sub sub1(ByVal i As Integer) Implements Interface2.sub1
' Insert code here that implements this method.
End Sub
Sub M1(ByVal x As Integer) Implements Interface2.M1
' Insert code here to implement this method.
End Sub
ReadOnly Property Num() As Integer Implements Interface2.Num
Get
Num = INum
End Get
End Property
End Class
È possibile implementare una proprietà readonly con una proprietà readwrite, ovvero non è necessario dichiararla in sola lettura nella classe di implementazione. Realizzare un'interfaccia promette di implementare almeno i membri dichiarati dall'interfaccia, ma è possibile offrire più funzionalità, ad esempio rendere la proprietà modificabile.
Argomenti correlati
| Titolo | Descrizione |
|---|---|
| Procedura dettagliata: Creazione e implementazione di interfacce | Fornisce una procedura dettagliata che illustra il processo di definizione e implementazione di un'interfaccia personalizzata. |
| Varianza nelle interfacce generiche | Viene descritta la covarianza e la controvarianza nelle interfacce generiche e viene fornito un elenco di interfacce generiche varianti in .NET Framework. |